Я пытаюсь выполнить функцию резервного копирования / восстановления статических свойств классов. Я могу получить список всех статических свойств и их значений с помощью метода объектов отражения 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();