ReflectionProperty::setValue

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

説明

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

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

注意: PHP 8.3.0 以降では、このメソッドにひとつだけ引数を渡してコールすることは、推奨されなくなりました。 ReflectionClass::setStaticPropertyValue を使いましょう。

パラメータ

object

static でないプロパティの場合は、プロパティを変更したいオブジェクトを指定しなければなりません。 staticプロパティ の場合、null を指定しなければ なりません

value

新しい値。

戻り値

値を返しません。

変更履歴

バージョン 説明
8.3.0 このメソッドにひとつだけ引数を渡してコールすることは、推奨されなくなりました。static プロパティを変更する場合は、代わりに ReflectionClass::setStaticPropertyValue を使ってください。
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 プロパティを設定する目的で setValue メソッドを使うべきではありません。代わりに、setStaticPropertyValue() を使いましょう。
$reflectionClass->setStaticPropertyValue('staticProperty', '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