PHP 8.0.0 Beta 4 available for testing

WeakReference クラス

(PHP 7 >= 7.4.0)

はじめに

弱い参照により、オブジェクトが破棄されるのを防がないオブジェクトへの参照を保持することが可能です。 この機能は、キャッシュのようなデータ構造を実装するのに役立ちます。

注意:

WeakReference クラスは、 Weakref 拡張機能の WeakRef クラスと混乱させる意図はありません。

WeakReference クラスはシリアライズ化できません。

クラス概要

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

WeakReference の例

例1 基本的な WeakReference クラスの使い方

<?php
$obj 
= new stdClass;
$weakref WeakReference::create($obj);
var_dump($weakref->get());
unset(
$obj);
var_dump($weakref->get());
?>

上の例の出力は、 たとえば以下のようになります。

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

目次

add a note add a note

User Contributed Notes 1 note

up
-18
Sandor Toth
9 months ago
You might consider to use WeakReference in your Container class. Don't forget to create the object into a variable and pass the variable to WeakReference::create() otherwise you going to ->get() null.

Consider as wrong solution, which returns null
<?php
/**
* @return App
*/
public static function app() : App
{
    if (!static::
$app) {
       static::
$app = WeakReference::create(new App());
    }

    return static::
$app->get();
}
?>

Consider as GOOD solution, which returns App instance
<?php
/**
* @return App
*/
public static function app() : App
{
    if (!static::
$app) {
      
$app = new App();
       static::
$app = WeakReference::create($app);
    }

    return static::
$app->get();
}
?>
To Top