(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.
factory
object
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.
options
options
puede ser una combinación de los siguientes flags:
ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE
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 resultado del ejemplo sería:
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) } }