有没有办法使用反射类设置私有/受保护的静态属性?
2022-08-30 09:10:36
我正在尝试对类的静态属性执行备份/还原功能。我可以使用反射对象方法获取所有静态属性及其值的列表。这将获取 和 属性及其值。getStaticProperties()
private
public static
问题是,在尝试使用反射对象方法恢复属性时,我似乎没有得到相同的结果。 和变量对 此方法不可见,因为它们对 .似乎不一致。setStaticPropertyValue($key, $value)
private
protected
getStaticProperties()
有没有办法使用反射类或任何其他方式来设置私有/受保护的静态属性?
试
class Foo {
static public $test1 = 1;
static protected $test2 = 2;
public function test () {
echo self::$test1 . '<br>';
echo self::$test2 . '<br><br>';
}
public function change () {
self::$test1 = 3;
self::$test2 = 4;
}
}
$test = new foo();
$test->test();
// Backup
$test2 = new ReflectionObject($test);
$backup = $test2->getStaticProperties();
$test->change();
// Restore
foreach ($backup as $key => $value) {
$property = $test2->getProperty($key);
$property->setAccessible(true);
$test2->setStaticPropertyValue($key, $value);
}
$test->test();