Есть ли способ установить частное / защищенное статическое свойство с помощью классов отражения?

Я пытаюсь выполнить функцию резервного копирования / восстановления статических свойств классов. Я могу получить список всех статических свойств и их значений с использованием метода объектов отражения getStaticProperties () . Это дает как частные , так и общедоступные статические свойства и их значения.

Проблема в том, что я, похоже, не получаю тот же результат при попытке восстановить свойства с помощью объектов отражения метод setStaticPropertyValue ($ key, $ value) . частные и защищенные переменные не отображаются для этого метода, как для getStaticProperties () . Кажется несовместимым.

Есть ли способ установить частное / защищенное статическое свойство с помощью классов отражения или каким-либо другим способом?

TRIED

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();
58
задан Davіd 5 July 2017 в 03:04
поделиться