PHP Conference Nagoya 2025

ReflectionClass::newLazyProxy

(PHP 8 >= 8.4.0)

ReflectionClass::newLazyProxyCréer une nouvelle instance proxy paresseuse

Description

public ReflectionClass::newLazyProxy(callable $factory, int $options = 0): object

Créer une nouvelle instance proxy paresseuse de la classe, en attachant la factory à celle-ci. Le constructeur n'est pas appelé, et les propriétés ne sont pas définies à leur valeur par défaut. Lorsqu'une tentative est faite d'observer ou de modifier l'état du proxy pour la première fois, la fonction fabrique est appelée pour fournir une instance réelle, qui est ensuite attachée au proxy. Après cela, toutes les interactions ultérieures avec le proxy sont transmises à l'instance réelle. Voir déclencheurs d'initialisation et séquence d'initialisation.

Liste de paramètres

factory
La fabrique est une fonction de rappel avec la signature suivante:

factory(object $object): object
object
L'object en cours d'initialisation. À ce point, l'objet n'est plus marqué comme paresseux, et y accéder ne déclenche plus l'initialisation.

La fonction fabrique doit renvoyer un objet, appelé instance réelle, qui est ensuite attaché au proxy. Cette instance réelle ne doit pas être paresseuse et ne doit pas être le proxy lui-même. Si l'instance réelle n'a pas la même classe que le proxy, la classe du proxy doit être une sous-classe de la classe de l'instance réelle, sans propriétés supplémentaires, et ne doit pas remplacer les méthodes __destruct() ou __clone(). methods.
options

options peut être une combinaison des drapeaux suivants:

ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE
Par défaut, la sérialisation d'un objet paresseux déclenche son initialisation. Définir ce drapeau empêche l'initialisation, permettant aux objets paresseux d'être sérialisés sans être initialisés.

Valeurs de retour

Renvoie une instance proxy paresseuse. Si l'objet n'a pas de propriétés, ou si toutes ses propriétés sont statiques ou virtuelles, une instance normale (non paresseuse) est renvoyée. Voir aussi Cycle de vie des objets paresseux.

Erreurs / Exceptions

Une ReflectionException si la classe est interne ou étends une classe interne, sauf stdClass.

Exemples

Exemple #1 Utilisation basique

<?php
class Example {
public function
__construct(public int $prop) {
echo
__METHOD__, "\n";
}
}

$reflector = new ReflectionClass(Example::class);
$object = $reflector->newLazyProxy(function (Example $object) {
$realInstance = new Example(1);
return
$realInstance;
});

var_dump($object);
var_dump($object instanceof Example);

// Déclenche l'initialisation, et transmet la récupération de la propriété à l'instance réelle
var_dump($object->prop);

var_dump($object);
?>

L'exemple ci-dessus va afficher :

lazy proxy object(Example)#3 (0) {
  ["prop"]=>
  uninitialized(int)
}
bool(true)
Example::__construct
int(1)
lazy proxy object(Example)#3 (1) {
  ["instance"]=>
  object(Example)#4 (1) {
    ["prop"]=>
    int(1)
  }
}

Voir aussi

add a note

User Contributed Notes

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