PHP Conference Nagoya 2025

ReflectionClass::markLazyObjectAsInitialized

(PHP 8 >= 8.4.0)

ReflectionClass::markLazyObjectAsInitializedイニシャライザまたはファクトリを呼び出さずレイジーオブジェクトを初期化済みとしてマークする

説明

public ReflectionClass::markLazyObjectAsInitialized(object $object): object

イニシャライザまたはファクトリを呼び出さずレイジーオブジェクトを 初期化済みとしてマークします。object がレイジーでないか、 すでに初期化されている場合、このメソッドは効果がありません。

このメソッド動作は、object のレイジー戦略に関わらず、 初期化シーケンス においてゴーストオブジェクトに対して説明されたものとほぼ同じですが、 イニシャライザが呼び出されない点を除きます。 その後、オブジェクトは、ReflectionProperty::setRawValueWithoutLazyInitialization() または ReflectionProperty::skipLazyInitialization() で 既に初期化されたプロパティの値を除いて、 ReflectionClass::newInstanceWithoutConstructor() で作成された、 元々レイジーでなかったオブジェクトと区別がつかなくなります。

パラメータ

object
初期化済みとしてマークするオブジェクト。

戻り値

object を返します。

例1 未初期化のレイジーオブジェクトを初期化済みとしてマークする

<?php
class Example
{
public
string $prop1;
public
string $prop2;
public
string $prop3 = 'default value';
}

$reflector = new ReflectionClass(Example::class);

$object = $reflector->newLazyGhost(function ($object) {
echo
"Initializer called\n";
$object->prop1 = 'initialized';
});

$reflector->getProperty('prop1')
->
setRawValueWithoutLazyInitialization($object, 'prop1 value');

var_dump($object);

$reflector->markLazyObjectAsInitialized($object);

var_dump($object);
?>

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

lazy ghost object(Example)#3 (1) {
  ["prop1"]=>
  string(11) "prop1 value"
  ["prop2"]=>
  uninitialized(string)
  ["prop3"]=>
  uninitialized(string)
}
object(Example)#3 (2) {
  ["prop1"]=>
  string(11) "prop1 value"
  ["prop2"]=>
  uninitialized(string)
  ["prop3"]=>
  string(13) "default value"
}

例2 既に初期化されたオブジェクトを初期化済みとしてマークする

<?php
class Example
{
public
string $prop1;
public
string $prop2;
public
string $prop3 = 'default value';
}

$reflector = new ReflectionClass(Example::class);

$object = $reflector->newLazyGhost(function ($object) {
echo
"Initializer called\n";
$object->prop1 = 'initialized';
});

$reflector->getProperty('prop1')
->
setRawValueWithoutLazyInitialization($object, 'prop1 value');

var_dump($object->prop3);
var_dump($object);

$reflector->markLazyObjectAsInitialized($object);

var_dump($object);
?>

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

Initializer called
string(13) "default value"
object(Example)#3 (2) {
  ["prop1"]=>
  string(11) "initialized"
  ["prop2"]=>
  uninitialized(string)
  ["prop3"]=>
  string(13) "default value"
}
object(Example)#3 (2) {
  ["prop1"]=>
  string(11) "initialized"
  ["prop2"]=>
  uninitialized(string)
  ["prop3"]=>
  string(13) "default value"
}

参考

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top