クラスの静的プロパティのバックアップ/復元機能を実行しようとしています。リフレクションオブジェクトgetStaticProperties()
メソッドを使用して、すべての静的プロパティとその値のリストを取得できます。これは、private
と_public static
_の両方のプロパティとその値を取得します。
問題は、リフレクションオブジェクトsetStaticPropertyValue($key, $value)
メソッドを使用してプロパティを復元しようとすると、同じ結果が得られないようです。 private
変数とprotected
変数は、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();
_
クラスのprivate/protectedプロパティにアクセスするには、リフレクションを使用して、最初にそのクラスのアクセシビリティを設定する必要があります。次のコードを試してください:
$obj = new ClassName();
$refObject = new ReflectionObject( $obj );
$refProperty = $refObject->getProperty( 'property' );
$refProperty->setAccessible( true );
$refProperty->setValue(null, 'new value');
ReflectionObject
インスタンスを必要とせずに、リフレクションを使用してクラスのプライベート/保護されたプロパティにアクセスするには:
静的プロパティの場合:
<?php
$reflection = new \ReflectionProperty('ClassName', 'propertyName');
$reflection->setAccessible(true);
$reflection->setValue(null, 'new property value');
非静的プロパティの場合:
<?php
$instance = New SomeClassName();
$reflection = new \ReflectionProperty(get_class($instance), 'propertyName');
$reflection->setAccessible(true);
$reflection->setValue($instance, 'new property value');