ReflectionClass::resetAsLazyGhost
オブジェクトをリセットしてレイジーとしてマークする
説明
public void ReflectionClass::resetAsLazyGhost(object $object
, callable $initializer
, int $options
= 0)
既存の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