PHP Conference Japan 2024

ReflectionClass::resetAsLazyGhost

(PHP 8 >= 8.4.0)

ReflectionClass::resetAsLazyGhost重置对象并将其标记为延迟加载

描述

public ReflectionClass::resetAsLazyGhost(object $object, callable $initializer, int $options = 0): void

重置现有的 object 并将其标记为延迟加载。

除非指定了 ReflectionClass::SKIP_DESTRUCTOR 标志,否则将调用对象的析构函数(如果存在)。在对象是已初始化的代理的特殊情况下,真实实例将从代理分离。如果真实实例不再被其他地方引用,则无论 SKIP_DESTRUCTOR 标志如何,都将调用其析构函数。

动态属性将被删除,并且类上声明的属性的值将被丢弃,就像调用了 unset() 一样,并标记为延迟加载。这意味着如果对象是具有附加属性的子类的实例,则这些属性不会被修改,也不会被设置为延迟加载。如果 只读属性final 或类本身为 final,则它们也不会被修改,也不会被设置为延迟加载。

如果没有属性被标记为延迟加载,则该对象不会被标记为延迟加载。另请参阅 延迟对象生命周期

否则,在调用此方法后,对象的行為与通过 ReflectionClass::newLazyGhost() 创建的对象相同(除了子类和只读属性,如上所述)。

对象不会被其他对象替换,并且其标识保持不变。诸如 spl_object_id()spl_object_hash()SplObjectStorageWeakMapWeakReference同一性运算符 (===) 等功能不受影响。

参数

object
一个非延迟加载的对象,或一个已初始化的延迟加载对象。
initializer
一个初始化回调,其签名和用途与 ReflectionClass::newLazyGhost() 中的相同。
options

options 可以是以下标志的组合

ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE
默认情况下,序列化延迟加载对象会触发其初始化。设置此标志可以防止初始化,从而允许在不初始化的情况下序列化延迟加载对象。
ReflectionClass::SKIP_DESTRUCTOR
默认情况下,在将对象设为延迟加载之前,会调用对象的析构函数(如果有)。这为对象中任何预先存在的狀態提供了安全性。此标志禁用该行为,允许在不调用析构函数的情况下将对象重置为延迟加载。

返回值

不返回值。

错误/异常

如果对象是延迟加载且未初始化,则抛出 ReflectionException

如果对象正在初始化,或者对象的属性正在使用 foreach 进行迭代,则抛出 Error

参见

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top