mirror of
https://github.com/php/php-src.git
synced 2026-04-03 14:12:38 +02: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.
118 lines
2.8 KiB
PHP
118 lines
2.8 KiB
PHP
--TEST--
|
|
Test that ReflectionProperty::setAccessible() has no effects
|
|
--FILE--
|
|
<?php
|
|
class A {
|
|
protected $protected = 'a';
|
|
protected static $protectedStatic = 'b';
|
|
private $private = 'c';
|
|
private static $privateStatic = 'd';
|
|
}
|
|
|
|
class B extends A {}
|
|
|
|
$a = new A;
|
|
$protected = new ReflectionProperty($a, 'protected');
|
|
$protectedStatic = new ReflectionProperty('A', 'protectedStatic');
|
|
$private = new ReflectionProperty($a, 'private');
|
|
$privateStatic = new ReflectionProperty('A', 'privateStatic');
|
|
|
|
var_dump($protected->getValue($a));
|
|
var_dump($protectedStatic->getValue());
|
|
var_dump($private->getValue($a));
|
|
var_dump($privateStatic->getValue());
|
|
|
|
$protected->setValue($a, 'e');
|
|
$protectedStatic->setValue('f');
|
|
$private->setValue($a, 'g');
|
|
$privateStatic->setValue('h');
|
|
|
|
var_dump($protected->getValue($a));
|
|
var_dump($protectedStatic->getValue());
|
|
var_dump($private->getValue($a));
|
|
var_dump($privateStatic->getValue());
|
|
|
|
$protected->setAccessible(FALSE);
|
|
$protectedStatic->setAccessible(FALSE);
|
|
$private->setAccessible(FALSE);
|
|
$privateStatic->setAccessible(FALSE);
|
|
|
|
var_dump($protected->getValue($a));
|
|
var_dump($protectedStatic->getValue());
|
|
var_dump($private->getValue($a));
|
|
var_dump($privateStatic->getValue());
|
|
|
|
$protected->setValue($a, 'i');
|
|
$protectedStatic->setValue('j');
|
|
$private->setValue($a, 'k');
|
|
$privateStatic->setValue('l');
|
|
|
|
var_dump($protected->getValue($a));
|
|
var_dump($protectedStatic->getValue());
|
|
var_dump($private->getValue($a));
|
|
var_dump($privateStatic->getValue());
|
|
|
|
$a = new A;
|
|
$b = new B;
|
|
$protected = new ReflectionProperty($b, 'protected');
|
|
$protectedStatic = new ReflectionProperty('B', 'protectedStatic');
|
|
$private = new ReflectionProperty($a, 'private');
|
|
|
|
var_dump($protected->getValue($b));
|
|
var_dump($protectedStatic->getValue());
|
|
var_dump($private->getValue($b));
|
|
|
|
$protected->setValue($b, 'e');
|
|
$protectedStatic->setValue('f');
|
|
$private->setValue($b, 'g');
|
|
|
|
var_dump($protected->getValue($b));
|
|
var_dump($protectedStatic->getValue());
|
|
var_dump($private->getValue($b));
|
|
|
|
$protected->setAccessible(FALSE);
|
|
$protectedStatic->setAccessible(FALSE);
|
|
$private->setAccessible(FALSE);
|
|
|
|
var_dump($protected->getValue($b));
|
|
var_dump($protectedStatic->getValue());
|
|
var_dump($private->getValue($b));
|
|
|
|
$protected->setValue($b, 'h');
|
|
$protectedStatic->setValue('i');
|
|
$private->setValue($b, 'j');
|
|
|
|
var_dump($protected->getValue($b));
|
|
var_dump($protectedStatic->getValue());
|
|
var_dump($private->getValue($b));
|
|
?>
|
|
--EXPECT--
|
|
string(1) "a"
|
|
string(1) "b"
|
|
string(1) "c"
|
|
string(1) "d"
|
|
string(1) "e"
|
|
string(1) "f"
|
|
string(1) "g"
|
|
string(1) "h"
|
|
string(1) "e"
|
|
string(1) "f"
|
|
string(1) "g"
|
|
string(1) "h"
|
|
string(1) "i"
|
|
string(1) "j"
|
|
string(1) "k"
|
|
string(1) "l"
|
|
string(1) "a"
|
|
string(1) "j"
|
|
string(1) "c"
|
|
string(1) "e"
|
|
string(1) "f"
|
|
string(1) "g"
|
|
string(1) "e"
|
|
string(1) "f"
|
|
string(1) "g"
|
|
string(1) "h"
|
|
string(1) "i"
|
|
string(1) "j"
|