(PHP 8 >= 8.4.0)
ReflectionClass::newLazyProxy — Créer une nouvelle instance proxy paresseuse
Crée 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.
factoryLa fabrique est une fonction de rappel avec la signature suivante:
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().
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.
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.
Une ReflectionException si la classe est interne ou étend une classe interne, sauf stdClass.
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)
}
}