ReflectionProperty::setValue

プロパティの値を設定する

説明

public void ReflectionProperty::setValue(objectnull $object, mixed $value)
public void ReflectionProperty::setValue(mixed $value)

プロパティの値を設定 (変更) します。

注意: static プロパティの値を設定する場合は、 ReflectionProperty::setValue(null, $value) を使いましょう。

パラメータ

object

staticプロパティ の場合、null を渡してください。 static でないプロパティの場合は、オブジェクトを渡してください。

value

新しい値。

戻り値

値を返しません。

変更履歴

バージョン 説明
8.3.0 このメソッドにひとつだけ引数を渡してコールすることは、推奨されなくなりました。static プロパティの場合は、代わりに ReflectionProperty::setValue(null, $value) を使ってください。
8.1.0 private と protected なプロパティは ReflectionProperty::setValue ですぐにアクセスできるようになりました。 これより前のバージョンでは、 ReflectionProperty::setAccessible をコールすることでアクセスできるようにする必要がありました。 そうしない場合、 ReflectionException がスローされていました。

例1 ReflectionProperty::setValue の例

<?php
class Foo {
    public static $staticProperty;
    
    public $property;
    protected $privateProperty;
}

$reflectionClass = new ReflectionClass('Foo');

// PHP 8.3 以降では、static プロパティにアクセスするためには、
// 最初の引数に null を渡すことが必須になっています。
$reflectionProperty = $reflectionClass->getProperty('staticProperty');
$reflectionProperty->setValue(null, 'foo');
var_dump(Foo::$staticProperty);

$foo = new Foo;

$reflectionClass->getProperty('property')->setValue($foo, 'bar');
var_dump($foo->property);

$reflectionProperty = $reflectionClass->getProperty('privateProperty');
$reflectionProperty->setAccessible(true); // PHP 8.1.0 より前のバージョンのみ、この行の実行が必須でした
$reflectionProperty->setValue($foo, 'foobar');
var_dump($reflectionProperty->getValue($foo));
?>

上の例の出力は以下となります。

string(3) "foo"
string(3) "bar"
string(6) "foobar"

参考

  • ReflectionProperty::getValue
  • ReflectionProperty::setAccessible
  • ReflectionClass::setStaticPropertyValue