(PHP 8 >= 8.4.0)
ReflectionClass::newLazyProxy — Crear una nueva instancia proxy perezosa
Crear una nueva instancia proxy perezosa de la clase, adjuntando la
factory a la misma. El constructor no es
llamado, y las propiedades no son definidas a su valor por defecto. Cuando se
intenta observar o modificar el estado del proxy por primera vez, la función
fábrica es llamada para proporcionar una instancia real, que es luego adjuntada
al proxy. Después de esto, todas las interacciones posteriores con el proxy son
transmitidas a la instancia real. Ver
disparadores
de inicialización y
secuencia de inicialización.
factoryLa fábrica es una función de devolución de llamada con la siguiente firma:
object
El object en curso de inicialización. En este punto,
el objeto ya no está marcado como perezoso, y acceder a él no dispara
la inicialización.
La función fábrica debe devolver un objeto, llamado instancia real, que es luego adjuntado al proxy. Esta instancia real no debe ser perezosa ni debe ser el proxy mismo. Si la instancia real no tiene la misma clase que el proxy, la clase del proxy debe ser una subclase de la clase de la instancia real, sin propiedades adicionales, y no debe sobrescribir los métodos __destruct() o __clone().
options
options puede ser una combinación de los siguientes flags:
ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE
Por omisión, la serialización de un objeto perezoso desencadena su inicialización. Definir este flag evita la inicialización, permitiendo que los objetos perezosos sean serializados sin ser inicializados.
Devuelve una instancia proxy perezosa. Si el objeto no tiene propiedades, o si todas sus propiedades son estáticas o virtuales, se devuelve una instancia normal (no perezosa). Ver también Ciclo de vida de los objetos perezosos.
Una ReflectionException si la clase es interna o extiende una clase interna, excepto stdClass.
Ejemplo #1 Uso básico
<?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);
// Dispara la inicialización, y transmite la recuperación de la propiedad a la instancia real
var_dump($object->prop);
var_dump($object);
?>El ejemplo anterior mostrará:
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)
}
}