Lazy objects

PHP 🔴 Senior

Définition

Objets PHP 8.4 dont l'initialisation est différée jusqu'au premier accès à leur état. Deux stratégies via ReflectionClass : newLazyGhost() initialise l'objet sur place, newLazyProxy() délègué à une instance réelle créée à la demande. Lecture, écriture, clonage ou sérialisation déclenchent l'initialisation.

Analogie

Une chambre d'hôtel qu'on ne prépare que quand un client ouvre la porte.

Exemple de code

class Report {
  public function __construct(public array $rows) {
    echo "chargement coûteux\n";
  }
}

$rc = new ReflectionClass(Report::class);
$lazy = $rc->newLazyGhost(function (Report $r) {
  $r->__construct(fetchRows()); // exécuté au 1er accès
});

// rien n'est encore chargé
echo count($lazy->rows); // déclenche l'initialisation

Cas d'usage

Conteneurs d'injection (services lourds jamais appelés) et ORM (entités hydratées à la demande), sans proxys générés.

Anti-pattern

Créer des lazy objects à la main dans le code applicatif : c'est une primitive pour bibliothèques et frameworks.
#advanced#php84

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre