PHP Conference Japan 2024

ReflectionClass::setStaticPropertyValue

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

ReflectionClass::setStaticPropertyValue設定靜態屬性值

說明

public ReflectionClass::setStaticPropertyValue(字串 $name, 混合 $value): void

設定靜態屬性值。

參數

name

屬性名稱。

value

新的屬性值。

傳回值

不傳回任何值。

參見

新增筆記

使用者貢獻的筆記 2 則筆記

Andrew Jackson
10 年前
在非公開的靜態屬性上呼叫此方法將返回一個 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
chuck at manchuck dot com
12 年前
需要注意的是,呼叫 ReflectionClass::setStaticPropertyValue 無法讓您新增新的靜態屬性到類別中。
To Top