(PHP 8 >= 8.4.0)
ReflectionClass::newLazyProxy — 建立新的惰性代理實例
建立一個新的類別的惰性代理實例,並將 factory
函式附加到它。建構子不會被呼叫,屬性也不會被設定為其預設值。當第一次嘗試觀察或修改代理的狀態時,會呼叫 factory 函式來提供一個真實的實例,然後將其附加到代理。在此之後,所有與代理的後續互動都會轉發到真實的實例。請參閱 初始化觸發器 和 初始化順序。
factory
object
object
是正在初始化的物件。此時,該物件不再被標記為惰性,並且訪問它不會再次觸發初始化。
options
options
可以是以下旗標的組合
ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE
返回一個惰性代理實例。如果物件沒有屬性,或者它的所有屬性都是靜態或虛擬的,則返回一個普通的(非惰性)實例。另請參閱 惰性物件的生命週期。
範例 #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) } }