mirror of
https://github.com/php/php-src.git
synced 2026-04-17 21:11:02 +02:00
`ReflectionClass` allows reading of the values of private and protected constants, and also to get private and protected static methods. Therefore getting the values of private and protected static properties is also permissible, especially since `::getStaticProperties()` already allows to do so. We also allow ::setStaticPropertyValue() to modify private and protected properties, because otherwise this method is useless, as modifying public properties can be done directly.
116 lines
2.2 KiB
PHP
116 lines
2.2 KiB
PHP
--TEST--
|
|
ReflectionClass::[gs]etStaticPropertyValue
|
|
--FILE--
|
|
<?php
|
|
|
|
/* ReflectionClass cannot touch protected or private static properties */
|
|
|
|
/* ReflectionClass cannot create or delete static properties */
|
|
|
|
Class Test
|
|
{
|
|
static public $pub = 'pub';
|
|
static protected $pro = 'pro';
|
|
static private $pri = 'pri';
|
|
|
|
static function testing()
|
|
{
|
|
$ref = new ReflectionClass('Test');
|
|
|
|
foreach(array('pub', 'pro', 'pri') as $name)
|
|
{
|
|
try
|
|
{
|
|
var_dump($ref->getStaticPropertyValue($name));
|
|
var_dump($ref->getStaticPropertyValue($name));
|
|
$ref->setStaticPropertyValue($name, 'updated');
|
|
var_dump($ref->getStaticPropertyValue($name));
|
|
}
|
|
catch(Exception $e)
|
|
{
|
|
echo "EXCEPTION\n";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Class TestDerived extends Test
|
|
{
|
|
// static public $pub = 'pub';
|
|
// static protected $pro = 'pro';
|
|
static private $pri = 'pri';
|
|
|
|
static function testing()
|
|
{
|
|
$ref = new ReflectionClass('Test');
|
|
|
|
foreach(array('pub', 'pro', 'pri') as $name)
|
|
{
|
|
try
|
|
{
|
|
var_dump($ref->getStaticPropertyValue($name));
|
|
var_dump($ref->getStaticPropertyValue($name));
|
|
$ref->setStaticPropertyValue($name, 'updated');
|
|
var_dump($ref->getStaticPropertyValue($name));
|
|
}
|
|
catch(Exception $e)
|
|
{
|
|
echo "EXCEPTION\n";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$ref = new ReflectionClass('Test');
|
|
|
|
foreach(array('pub', 'pro', 'pri') as $name)
|
|
{
|
|
try
|
|
{
|
|
var_dump($ref->getStaticPropertyValue($name));
|
|
var_dump($ref->getStaticPropertyValue($name));
|
|
$ref->setStaticPropertyValue($name, 'updated');
|
|
var_dump($ref->getStaticPropertyValue($name));
|
|
}
|
|
catch(Exception $e)
|
|
{
|
|
echo "EXCEPTION\n";
|
|
}
|
|
}
|
|
|
|
Test::testing();
|
|
TestDerived::testing();
|
|
|
|
?>
|
|
===DONE===
|
|
<?php exit(0); ?>
|
|
--EXPECT--
|
|
string(3) "pub"
|
|
string(3) "pub"
|
|
string(7) "updated"
|
|
string(3) "pro"
|
|
string(3) "pro"
|
|
string(7) "updated"
|
|
string(3) "pri"
|
|
string(3) "pri"
|
|
string(7) "updated"
|
|
string(7) "updated"
|
|
string(7) "updated"
|
|
string(7) "updated"
|
|
string(7) "updated"
|
|
string(7) "updated"
|
|
string(7) "updated"
|
|
string(7) "updated"
|
|
string(7) "updated"
|
|
string(7) "updated"
|
|
string(7) "updated"
|
|
string(7) "updated"
|
|
string(7) "updated"
|
|
string(7) "updated"
|
|
string(7) "updated"
|
|
string(7) "updated"
|
|
string(7) "updated"
|
|
string(7) "updated"
|
|
string(7) "updated"
|
|
===DONE===
|