ReflectionClass::resetAsLazyGhost
(PHP 8 >= 8.4.0)
ReflectionClass::resetAsLazyGhost — オブジェクトをリセットしてレイジーとしてマークする
説明
$object
, callable $initializer
, int $options
= 0): void
既存のobject
をリセットし、レイジーとしてマークします。
オブジェクトのデストラクタが存在する場合、
ReflectionClass::SKIP_DESTRUCTOR
フラグが指定されていない限り、
デストラクタが呼び出されます。特殊なケースとして、オブジェクトが初期済のプロキシの場合、
実インスタンスはプロキシから切り離されます。実インスタンスが他で参照されていない場合、
SKIP_DESTRUCTOR
フラグに関係なく、
そのデストラクタが呼び出されます。
動的プロパティは削除され、クラスで宣言されたプロパティの値は
unset() と同等の方法で破棄され、
レイジーとしてマークされます。これは、オブジェクトが追加のプロパティを持つ
サブクラスのインスタンスである場合、これらのプロパティは変更されず、
レイジーにもならないことを意味します。
読み取り専用プロパティも、
final
であるかクラス自体がfinal
である場合、
変更されず、レイジーにもなりません。
レイジーとしてマークされたプロパティがない場合、オブジェクトはレイジーとしてマークされません。 レイジーオブジェクトのライフサイクル も参照してください。
それ以外の場合、このメソッドを呼び出した後、 オブジェクトの動作は ReflectionClass::newLazyGhost()によって作成されたオブジェクトと同じになります (上記で説明したサブクラスと読み取り専用プロパティを除く)。
オブジェクトは他のものに置き換えられず、その同一性は変わりません。
spl_object_id()、
spl_object_hash()、
SplObjectStorage、
WeakMap、
WeakReference、または
一致演算子
(===
)などの機能は影響を受けません。
パラメータ
object
- 非レイジーなオブジェクト、または初期化されたレイジーオブジェクト。
initializer
- ReflectionClass::newLazyGhost() と同じシグネチャと目的を持つイニシャライザコールバック。
options
-
options
には 以下のフラグを組み合わせて指定できます:-
ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE
- デフォルトでは、レイジーオブジェクトのシリアライズは 初期化がトリガーされます。このフラグを設定すると、 初期化せずにシリアライズできるようになります。
-
ReflectionClass::SKIP_DESTRUCTOR
- デフォルトでは、オブジェクトをレイジーにする前に、そのデストラクタが(存在すれば) 呼び出されます。これは、オブジェクト内の既存の状態に関する安全性を提供します。 このフラグはその動作を無効にし、デストラクタを呼び出さずにオブジェクトを レイジーとしてリセットできるようにします。
-
戻り値
値を返しません。
エラー / 例外
オブジェクトがレイジーで未初期化の場合、ReflectionExceptionを スローします。
オブジェクトが初期化中である場合、またはforeach()で プロパティが反復処理されている場合、Errorを スローします。
参考
- ReflectionClass::newLazyGhost() - 新しいレイジーゴーストインスタンスを作成する
- ReflectionClass::resetAsLazyProxy() - オブジェクトをリセットしてレイジーとしてマークする