在非公開的靜態屬性上呼叫此方法將返回一個 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 的屬性'
如果您使用 reflection 類別的 getProperty 方法取得該方法,則可以解決此問題
$reflectedProperty = $reflectedClass->getProperty('privateProperty');
$reflectedProperty->setAccessible(true);
$reflectedProperty = $reflectedProperty->setValue('bar');
test::printProperties();
將會輸出
foo
bar