The behavior is now consistent with ReflectionMethod.
This commit is contained in:
Nikita Popov 2018-07-02 18:56:27 +02:00
parent 787593b708
commit c97b8bbf82
3 changed files with 28 additions and 1 deletions

2
NEWS
View File

@ -36,6 +36,8 @@ PHP NEWS
- Reflection:
. Fixed bug #76536 (PHP crashes with core dump when throwing exception in
error handler). (Laruence)
. Fixed bug #75231 (ReflectionProperty#getValue() incorrectly works with
inherited classes). (Nikita)
- Standard:
. Fixed bug #76505 (array_merge_recursive() is duplicating sub-array keys).

View File

@ -5645,7 +5645,7 @@ ZEND_METHOD(reflection_property, getValue)
return;
}
if (!instanceof_function(Z_OBJCE_P(object), ref->ce)) {
if (!instanceof_function(Z_OBJCE_P(object), ref->prop.ce)) {
_DO_THROW("Given object is not an instance of the class this property was declared in");
/* Returns from this function */
}

View File

@ -0,0 +1,25 @@
--TEST--
Bug #75231: ReflectionProperty#getValue() incorrectly works with inherited classes
--FILE--
<?php
class A
{
public $prop;
public function __construct()
{
$this->prop = 'prop';
}
public function method()
{
return 'method';
}
}
class B extends A
{
}
print_r((new ReflectionMethod(B::class, 'method'))->invoke(new A()).PHP_EOL);
print_r((new ReflectionProperty(B::class, 'prop'))->getValue(new A()).PHP_EOL);
?>
--EXPECT--
method
prop