PHP 8.1.6 Released!

La classe WeakReference

(PHP 7 >= 7.4.0, PHP 8)

Introduction

Les références faibles permettent au programmeur de conserver une référence à un objet sans en empêcher sa destruction. Ils sont utiles pour implémenter des structures tel que des caches.

Les WeakReferences ne peuvent pas être sérialisées.

Synopsis de la classe

final class WeakReference {
/* Méthodes */
public __construct()
public static create(object $object): WeakReference
public get(): ?object
}

Exemple avec WeakReference

Exemple #1 Utilisation Simple de WeakReference

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

Résultat de l'exemple ci-dessus est similaire à :

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

Sommaire

add a note add a note

User Contributed Notes 1 note

up
-44
Sandor Toth
2 years 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