Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,6 @@ test('Proxy', $obj);
?>
--EXPECT--
# Ghost
ReflectionException: Can not use setRawValueWithoutLazyInitialization on dynamic property C::$dyn
ReflectionException: Cannot use setRawValueWithoutLazyInitialization() on dynamic property C::$dyn
# Proxy
ReflectionException: Can not use setRawValueWithoutLazyInitialization on dynamic property C::$dyn
ReflectionException: Cannot use setRawValueWithoutLazyInitialization() on dynamic property C::$dyn
16 changes: 8 additions & 8 deletions Zend/tests/lazy_objects/skipLazyInitialization.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -198,10 +198,10 @@ getValue(): string(5) "value"
## Property [ public static $static = 'static' ]

skipInitializerForProperty():
ReflectionException: Can not use skipLazyInitialization on static property A::$static
ReflectionException: Cannot use skipLazyInitialization() on static property A::$static

setRawValueWithoutLazyInitialization():
ReflectionException: Can not use setRawValueWithoutLazyInitialization on static property A::$static
ReflectionException: Cannot use setRawValueWithoutLazyInitialization() on static property A::$static

## Property [ public $noDefault = NULL ]

Expand Down Expand Up @@ -238,10 +238,10 @@ getValue(): string(5) "value"
## Property [ public virtual $virtual { get; set; } ]

skipInitializerForProperty():
ReflectionException: Can not use skipLazyInitialization on virtual property A::$virtual
ReflectionException: Cannot use skipLazyInitialization() on virtual property A::$virtual

setRawValueWithoutLazyInitialization():
ReflectionException: Can not use setRawValueWithoutLazyInitialization on virtual property A::$virtual
ReflectionException: Cannot use setRawValueWithoutLazyInitialization() on virtual property A::$virtual

## Property [ $dynamicProp ]

Expand Down Expand Up @@ -295,10 +295,10 @@ getValue(): string(5) "value"
## Property [ public static $static = 'static' ]

skipInitializerForProperty():
ReflectionException: Can not use skipLazyInitialization on static property A::$static
ReflectionException: Cannot use skipLazyInitialization() on static property A::$static

setRawValueWithoutLazyInitialization():
ReflectionException: Can not use setRawValueWithoutLazyInitialization on static property A::$static
ReflectionException: Cannot use setRawValueWithoutLazyInitialization() on static property A::$static

## Property [ public $noDefault = NULL ]

Expand Down Expand Up @@ -335,10 +335,10 @@ getValue(): string(5) "value"
## Property [ public virtual $virtual { get; set; } ]

skipInitializerForProperty():
ReflectionException: Can not use skipLazyInitialization on virtual property A::$virtual
ReflectionException: Cannot use skipLazyInitialization() on virtual property A::$virtual

setRawValueWithoutLazyInitialization():
ReflectionException: Can not use setRawValueWithoutLazyInitialization on virtual property A::$virtual
ReflectionException: Cannot use setRawValueWithoutLazyInitialization() on virtual property A::$virtual

## Property [ $dynamicProp ]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,6 @@ test('Proxy', $obj);
?>
--EXPECT--
# Ghost
ReflectionException: Can not use skipLazyInitialization on dynamic property C::$dyn
ReflectionException: Cannot use skipLazyInitialization() on dynamic property C::$dyn
# Proxy
ReflectionException: Can not use skipLazyInitialization on dynamic property C::$dyn
ReflectionException: Cannot use skipLazyInitialization() on dynamic property C::$dyn
12 changes: 6 additions & 6 deletions ext/reflection/php_reflection.c
Original file line number Diff line number Diff line change
Expand Up @@ -3728,7 +3728,7 @@ ZEND_METHOD(ReflectionMethod, getPrototype)

if (!mptr->common.prototype) {
zend_throw_exception_ex(reflection_exception_ptr, 0,
"Method %s::%s does not have a prototype", ZSTR_VAL(intern->ce->name), ZSTR_VAL(mptr->common.function_name));
"Method %s::%s() does not have a prototype", ZSTR_VAL(intern->ce->name), ZSTR_VAL(mptr->common.function_name));
RETURN_THROWS();
}

Expand Down Expand Up @@ -4195,7 +4195,7 @@ ZEND_METHOD(ReflectionClass, setStaticPropertyValue)
if (!variable_ptr) {
zend_clear_exception();
zend_throw_exception_ex(reflection_exception_ptr, 0,
"Class %s does not have a property named %s", ZSTR_VAL(ce->name), ZSTR_VAL(name));
"Property %s::$%s does not exist", ZSTR_VAL(ce->name), ZSTR_VAL(name));
RETURN_THROWS();
}

Expand Down Expand Up @@ -6039,23 +6039,23 @@ static zend_result reflection_property_check_lazy_compatible(
{
if (!prop) {
zend_throw_exception_ex(reflection_exception_ptr, 0,
"Can not use %s on dynamic property %s::$%s",
"Cannot use %s() on dynamic property %s::$%s",
Comment thread
Girgias marked this conversation as resolved.
method, ZSTR_VAL(scope->name),
ZSTR_VAL(unmangled_name));
return FAILURE;
}

if (prop->flags & ZEND_ACC_STATIC) {
zend_throw_exception_ex(reflection_exception_ptr, 0,
"Can not use %s on static property %s::$%s",
"Cannot use %s() on static property %s::$%s",
method, ZSTR_VAL(prop->ce->name),
ZSTR_VAL(unmangled_name));
return FAILURE;
}

if (prop->flags & ZEND_ACC_VIRTUAL) {
zend_throw_exception_ex(reflection_exception_ptr, 0,
"Can not use %s on virtual property %s::$%s",
"Cannot use %s() on virtual property %s::$%s",
method, ZSTR_VAL(prop->ce->name),
ZSTR_VAL(unmangled_name));
return FAILURE;
Expand All @@ -6065,7 +6065,7 @@ static zend_result reflection_property_check_lazy_compatible(
&& !zend_class_can_be_lazy(object->ce)
) {
zend_throw_exception_ex(reflection_exception_ptr, 0,
"Can not use %s on internal class %s",
"Cannot use %s() on internal class %s",
method, ZSTR_VAL(object->ce->name));
return FAILURE;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,5 +73,5 @@ Array
)

Set non-existent values from A with no default value:
Class A does not have a property named protectedDoesNotExist
Class A does not have a property named privateDoesNotExist
Property A::$protectedDoesNotExist does not exist
Property A::$privateDoesNotExist does not exist
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,6 @@ ReflectionClass::setStaticPropertyValue() expects exactly 2 arguments, 0 given
ReflectionClass::setStaticPropertyValue() expects exactly 2 arguments, 1 given

Deprecated: ReflectionClass::setStaticPropertyValue(): Passing null to parameter #1 ($name) of type string is deprecated in %s on line %d
Class C does not have a property named
Class C does not have a property named 1.5
Property C::$ does not exist
Property C::$1.5 does not exist
ReflectionClass::setStaticPropertyValue(): Argument #1 ($name) must be of type string, array given
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
--TEST--
Test ReflectionProperty::setRawValueWithoutLazyInitialization() and skipLazyInitialization() errors
--FILE--
<?php

#[AllowDynamicProperties]
class Demo {
public static $myStatic;

public bool $myVirtual {
get => true;
}
}

function test(object $obj, string $propertyName) {
$r = new ReflectionProperty($obj, $propertyName);
try {
$r->setRawValueWithoutLazyInitialization($obj, true);
} catch (ReflectionException $e) {
echo $e->getMessage() . "\n";
}
try {
$r->skipLazyInitialization($obj);
} catch (ReflectionException $e) {
echo $e->getMessage() . "\n\n";
}
}

$obj = new Demo();
test($obj, 'myStatic');
test($obj, 'myVirtual');

$obj->myDynamic = true;
test($obj, 'myDynamic');

$obj = new ReflectionClass(Demo::class);
test($obj, 'name');

?>
--EXPECT--
Cannot use setRawValueWithoutLazyInitialization() on static property Demo::$myStatic
Cannot use skipLazyInitialization() on static property Demo::$myStatic

Cannot use setRawValueWithoutLazyInitialization() on virtual property Demo::$myVirtual
Cannot use skipLazyInitialization() on virtual property Demo::$myVirtual

Cannot use setRawValueWithoutLazyInitialization() on dynamic property Demo::$myDynamic
Cannot use skipLazyInitialization() on dynamic property Demo::$myDynamic

Cannot use setRawValueWithoutLazyInitialization() on internal class ReflectionClass
Cannot use skipLazyInitialization() on internal class ReflectionClass
2 changes: 1 addition & 1 deletion ext/reflection/tests/bug74949.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,4 @@ try {
Method [ <internal> public method __invoke ] {
}

Method Closure::__invoke does not have a prototype
Method Closure::__invoke() does not have a prototype
4 changes: 2 additions & 2 deletions ext/reflection/tests/property_hooks/gh17713.phpt
Original file line number Diff line number Diff line change
Expand Up @@ -157,13 +157,13 @@ int(43)
# Accessing Base->virtualProp from scope Base
Must not write to virtual property Base::$virtualProp
Must not read from virtual property Base::$virtualProp
Can not use setRawValueWithoutLazyInitialization on virtual property Base::$virtualProp
Cannot use setRawValueWithoutLazyInitialization() on virtual property Base::$virtualProp
Must not read from virtual property Base::$virtualProp
# Accessing Test->dynamicProp from scope Base
int(42)
int(43)
# Accessing Test->changedProp from scope Base
May not use setRawValue on static properties
May not use getRawValue on static properties
Can not use setRawValueWithoutLazyInitialization on static property Test::$changedProp
Cannot use setRawValueWithoutLazyInitialization() on static property Test::$changedProp
May not use getRawValue on static properties
Loading