mirror of
https://github.com/php/php-src.git
synced 2026-04-04 22:52:40 +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.
66 lines
2.1 KiB
PHP
66 lines
2.1 KiB
PHP
--TEST--
|
|
ReflectionClass::getStaticPropertyValue()
|
|
--CREDITS--
|
|
Robin Fernandes <robinf@php.net>
|
|
Steve Seear <stevseea@php.net>
|
|
--FILE--
|
|
<?php
|
|
class A {
|
|
static private $privateOverridden = "original private";
|
|
static protected $protectedOverridden = "original protected";
|
|
static public $publicOverridden = "original public";
|
|
}
|
|
|
|
class B extends A {
|
|
static private $privateOverridden = "changed private";
|
|
static protected $protectedOverridden = "changed protected";
|
|
static public $publicOverridden = "changed public";
|
|
}
|
|
|
|
echo "Retrieving static values from A:\n";
|
|
$rcA = new ReflectionClass('A');
|
|
var_dump($rcA->getStaticPropertyValue("privateDoesNotExist", "default value"));
|
|
var_dump($rcA->getStaticPropertyValue("privateOverridden"));
|
|
var_dump($rcA->getStaticPropertyValue("protectedDoesNotExist", "default value"));
|
|
var_dump($rcA->getStaticPropertyValue("protectedOverridden"));
|
|
var_dump($rcA->getStaticPropertyValue("publicOverridden"));
|
|
|
|
echo "\nRetrieving static values from B:\n";
|
|
$rcB = new ReflectionClass('B');
|
|
var_dump($rcB->getStaticPropertyValue("privateOverridden"));
|
|
var_dump($rcB->getStaticPropertyValue("protectedOverridden"));
|
|
var_dump($rcB->getStaticPropertyValue("publicOverridden"));
|
|
|
|
echo "\nRetrieving non-existent values from A with no default value:\n";
|
|
try {
|
|
var_dump($rcA->getStaticPropertyValue("protectedDoesNotExist"));
|
|
echo "you should not see this";
|
|
} catch (Exception $e) {
|
|
echo $e->getMessage() . "\n";
|
|
}
|
|
|
|
try {
|
|
var_dump($rcA->getStaticPropertyValue("privateDoesNotExist"));
|
|
echo "you should not see this";
|
|
} catch (Exception $e) {
|
|
echo $e->getMessage() . "\n";
|
|
}
|
|
|
|
?>
|
|
--EXPECT--
|
|
Retrieving static values from A:
|
|
string(13) "default value"
|
|
string(16) "original private"
|
|
string(13) "default value"
|
|
string(18) "original protected"
|
|
string(15) "original public"
|
|
|
|
Retrieving static values from B:
|
|
string(15) "changed private"
|
|
string(17) "changed protected"
|
|
string(14) "changed public"
|
|
|
|
Retrieving non-existent values from A with no default value:
|
|
Class A does not have a property named protectedDoesNotExist
|
|
Class A does not have a property named privateDoesNotExist
|