PHP Conference Nagoya 2025

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を スローします。

参考

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top