PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのWeakReferenceクラスとは?ウィークリファレンスの基本と使い方

はじめに

ウィークリファレンス(弱い参照)を使うと、オブジェクトへの参照を保持しながらも、そのオブジェクトの破棄を妨げないようにすることができます。この特性を活かせば、キャッシュのような構造を実装可能です。

ウィークリファレンスは通常の参照と似ていますが、ガベージコレクタによるオブジェクトの回収を妨げないという点が大きく異なります。対象のオブジェクトへの強い参照が存在しなくなった場合、そのオブジェクトは直ちにメモリから解放されます。この仕組みにより、メモリに関する問題を引き起こすことなく、キャッシュの持つ利点のほとんどを実現できます。

WeakReferenceクラスはPHP 7.4で導入されました。それ以前のバージョンでは、weakref拡張モジュールによって同等の機能を実現していました。WeakReferenceクラスは、次のような構造を持っています。

構文

WeakReference {    /* メソッド */    public __construct ( void )    public static create ( object $referent ) : WeakReference    public get ( void ) : ?object}

メソッド

public WeakReference::__construct ( void ) — WeakReferenceクラスの直接的なインスタンス化は禁止されています。インスタンスを生成するには、ファクトリメソッドであるWeakReference::create()を使用してください。

public static WeakReference::create ( object $referent ) : WeakReference — 新しいWeakReferenceを作成します。

public WeakReference::get ( void ) : ?object — 弱く参照されているオブジェクトを取得します。オブジェクトがすでに破棄されている場合はNULLを返します。

動作の流れ

次の例では、myclassのオブジェクトを作成し、そのオブジェクトへのWeakReferenceを生成しています。オブジェクトが存在する間はget()メソッドを通じてオブジェクトを取得できますが、unset()でオブジェクトを破棄した後は、WeakReferenceはNULLを返すようになります。

コード例

<?phpclass myclass{    function Hello(){       echo "Hello";    }}$obj = new myclass();$ref = WeakReference::create($obj);var_dump($ref->get());unset($obj);var_dump($ref->get());?>

出力結果

上記のプログラムを実行すると、次の出力が得られます。

object(myclass)#1 (0) {}NULL

  1. C#のOrderedDictionaryクラスとは?主なプロパティ・メソッドと使い方を解説

    OrderedDictionaryクラスは、キーまたはインデックスのいずれかでアクセスできる、キー/値ペアのコレクションを表します。このクラスは System.Collections.Specialized 名前空間に属しており、要素を追加した順序が保持される点が大きな特徴です。そのため、「辞書のようにキーで素早くアクセスしつつ、挿入順も維持したい」というケースに適しています。 OrderedDictionaryクラスの主なプロパティ 以下は、OrderedDictionaryクラスの代表的なプロパティの一覧です。 番号プロパティと説明 1CountOrderedDictionaryコ

  2. C#のStackクラスとは?主なプロパティとメソッドを徹底解説

    Stackクラスとは C#のStackクラスは、後入れ先出し(LIFO:Last-In, First-Out)という仕組みでオブジェクトを管理するコレクションです。スタックでは、最後に追加した要素が最初に取り出されるため、「直近に追加したデータから順番に処理したい」という場面で活用されます。 例えば、操作履歴の「元に戻す(Undo)」機能や、再帰的な処理の一時保存など、LIFO構造が自然にマッチするケースでよく使われています。 Stackクラスの主なプロパティ Count ― スタックに格納されている要素の数を取得します。 Stackクラスの主なメソッド一覧 Stackクラスには、要素