ReflectionClass::setStaticPropertyValue

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

ReflectionClass::setStaticPropertyValue设置静态属性值

描述

public ReflectionClass::setStaticPropertyValue(string $name, mixed $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 的属性”

如果使用反射类 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