mirror of
https://github.com/php/php-src.git
synced 2026-03-24 08:12:21 +01:00
With this patch, it is no longer required to call `ReflectionProperty#setAccessible()` or `ReflectionMethod#setAccessible()` with `true`. If a userland consumer already got to the point of accessing object/class information via reflection, it makes little sense for `ext/reflection` to disallow accessing `private`/`protected` symbols by default. After this patch, calling `ReflectionProperty#setAccessible(true)` or `ReflectionMethod#setAccessible(true)` on newly instantiated `ReflectionProperty` or `ReflectionMethod` respectively will have no effect. RFC: https://wiki.php.net/rfc/make-reflection-setaccessible-no-op Closes GH-5412.
44 lines
739 B
PHP
44 lines
739 B
PHP
--TEST--
|
|
Bug #49719 (ReflectionClass::hasProperty returns true for a private property in base class)
|
|
--FILE--
|
|
<?php
|
|
|
|
class A {
|
|
private $a;
|
|
}
|
|
class B extends A {
|
|
private $b;
|
|
}
|
|
|
|
try {
|
|
$b = new B;
|
|
$ref = new ReflectionClass($b);
|
|
|
|
var_dump(property_exists('b', 'a'));
|
|
var_dump(property_exists($b, 'a'));
|
|
var_dump($ref->hasProperty('a'));
|
|
var_dump($ref->getProperty('a'));
|
|
} catch (Exception $e) {
|
|
var_dump($e->getMessage());
|
|
}
|
|
|
|
class A2 {
|
|
private $a = 1;
|
|
}
|
|
|
|
class B2 extends A2 {
|
|
private $a = 2;
|
|
}
|
|
|
|
$b2 = new ReflectionClass('B2');
|
|
$prop = $b2->getProperty('a');
|
|
var_dump($prop->getValue(new b2));
|
|
|
|
?>
|
|
--EXPECT--
|
|
bool(false)
|
|
bool(false)
|
|
bool(false)
|
|
string(29) "Property B::$a does not exist"
|
|
int(2)
|