(PHP 8 >= 8.4.0)
ReflectionClass::newLazyProxy — 创建一个新的延迟代理实例
创建一个类的新的延迟代理实例,并将$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) } }