Crear una nueva instancia proxy perezosa

# ReflectionClass::newLazyProxy

(PHP 8 >= 8.4.0)

ReflectionClass::newLazyProxy — Crear una nueva instancia proxy perezosa

### Descripción

public function 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:

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

### Ver también

- Objetos perezosos
- ReflectionClass::newLazyGhost() - Crear una nueva instancia fantasma perezosa
- ReflectionClass::newInstanceWithoutConstructor() - Crea una nueva instancia de la clase sin invocar el constructor
- ReflectionClass::resetAsLazyProxy() - Reinicia un objeto y lo marca como perezoso
- ReflectionClass::markLazyObjectAsInitialized() - Marca un objeto perezoso como inicializado sin llamar al inicializador o a la fábrica
- ReflectionClass::initializeLazyObject() - Forzar la inicialización de un objeto perezoso
- ReflectionClass::isUninitializedLazyObject() - Verifica si un objeto es perezoso y no inicializado
- ReflectionProperty::setRawValueWithoutLazyInitialization() - Define el valor bruto de una propiedad sin activar la inicialización perezosa
- ReflectionProperty::skipLazyInitialization() - Marca una propiedad como no perezosa
- ReflectionProperty::isLazy() - Verifica si una propiedad es perezosa

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open