ReflectionClass::newLazyProxy

(PHP 8 >= 8.4.0)

ReflectionClass::newLazyProxyCrear una nueva instancia proxy perezosa

Descripción

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

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.

Parámetros

factory
La fábrica es una función de devolución de llamada con la siguiente firma:

factory(object $object): object
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.

Valores devueltos

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.

Errores/Excepciones

Una ReflectionException si la clase es interna o extiende una clase interna, excepto stdClass.

Ejemplos

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)
  }
}

Ver también

add a note

User Contributed Notes

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