1
0
mirror of https://github.com/php/php-src.git synced 2026-04-17 21:11:02 +02:00
Files
archived-php-src/ext/reflection/tests/006.phpt
Christoph M. Becker 26aefb750a Fix #69804: ::getStaticPropertyValue() throws on protected props
`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.
2020-06-24 11:17:36 +02:00

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===