对非公共静态属性调用此方法将返回一个 ReflectionException,指出属性不存在。这很误导,因为属性是有效的。
class test {
public static $publicProperty = 'public';
private static $privateProperty = 'private';
public static function printProperties() {
echo self::$publicProperty . "\n";
echo self::$privateProperty . "\n";
}
}
$reflectedClass = new \ReflectionClass('test');
$reflectedClass->setStaticPropertyValue('publicProperty', 'foo');
$reflectedClass->setStaticPropertyValue( 'privateProperty', 'bar' );
PHP 致命错误:未捕获的异常“ReflectionException”,消息为“类 test 没有名为 privateProperty 的属性”
如果使用反射类 getProperty 方法检索该方法,则可以规避此问题
$reflectedProperty = $reflectedClass->getProperty('privateProperty');
$reflectedProperty->setAccessible(true);
$reflectedProperty = $reflectedProperty->setValue('bar');
test::printProperties();
将回显
foo
bar