ReflectionClass::newLazyProxy
(PHP 8 >= 8.4.0)
ReflectionClass::newLazyProxy — 新しいレイジープロキシインスタンスを作成する
説明
クラスの新しいレイジープロキシインスタンスを作成し、
factory
をアタッチします。コンストラクタは呼び出されず、
プロパティはデフォルト値に設定されません。プロキシの状態を
初めて参照または変更する時に、
ファクトリ関数により実インスタンスが初期化され、
プロキシにアタッチされます。その後、プロキシとのすべての対話は
実インスタンスに転送されます。
初期化トリガーおよび
初期化シーケンス
を参照してください。
パラメータ
factory
-
ファクトリは以下のシグネチャを持つコールバックです:
object
-
初期化される
object
。この時点では、 オブジェクトはもはやレイジーとしてマークされておらず、 アクセスしても再び初期化がトリガーされることはありません。
options
-
options
には以下のフラグを組み合わせて 指定できます:-
ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE
- デフォルトでは、レイジーオブジェクトのシリアライズは 初期化がトリガーされます。このフラグを設定すると、 初期化せずにシリアライズできるようになります。
-
戻り値
レイジープロキシインスタンスを返します。オブジェクトにプロパティがない場合、または そのプロパティがすべてstaticまたはvirtualの場合、通常の(レイジーではない)インスタンスが 返されます。 レイジーオブジェクトの ライフサイクルも参照してください。
例
例1 基本的な使用法
<?php
class Example {
public function __construct(public int $prop) {
echo __METHOD__, "\n";
}
}
$reflector = new ReflectionClass(Example::class);
$object = $reflector->newLazyProxy(function (Example $object) {
$realInstance = new Example(1);
return $realInstance;
});
var_dump($object);
var_dump($object instanceof Example);
// 初期化をトリガーし、プロパティの取得を実インスタンスに転送します
var_dump($object->prop);
var_dump($object);
?>
上の例の出力は以下となります。
lazy proxy object(Example)#3 (0) { ["prop"]=> uninitialized(int) } bool(true) Example::__construct int(1) lazy proxy object(Example)#3 (1) { ["instance"]=> object(Example)#4 (1) { ["prop"]=> int(1) } }
参考
- レイジーオブジェクト
- ReflectionClass::newLazyGhost() - 新しいレイジーゴーストインスタンスを作成する
- ReflectionClass::newInstanceWithoutConstructor() - コンストラクタを起動せずに新しいクラスのインスタンスを作成する
- ReflectionClass::resetAsLazyProxy() - オブジェクトをリセットしてレイジーとしてマークする
- ReflectionClass::markLazyObjectAsInitialized() - イニシャライザまたはファクトリを呼び出さずレイジーオブジェクトを初期化済みとしてマークする
- ReflectionClass::initializeLazyObject() - レイジーオブジェクトを強制的に初期化する
- ReflectionClass::isUninitializedLazyObject() - オブジェクトがレイジーで未初期化かどうかを調べる
- ReflectionProperty::setRawValueWithoutLazyInitialization() - 遅延初期化をトリガーせず生のプロパティ値を設定する
- ReflectionProperty::skipLazyInitialization() - プロパティを非レイジーとしてマークする
- ReflectionProperty::isLazy() - プロパティがレイジーであるかどうかを調べる
+add a note
User Contributed Notes
There are no user contributed notes for this page.