Créer une nouvelle instance proxy paresseuse

# ReflectionClass::newLazyProxy

(PHP 8 >= 8.4.0)

ReflectionClass::newLazyProxy — Créer une nouvelle instance proxy paresseuse

### Description

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

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.

### Liste de paramètres

`factory`
  La fabrique est une fonction de rappel avec la signature suivante:

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

### Valeurs de retour

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.

### Erreurs / Exceptions

Une ReflectionException si la classe est interne ou étend une classe interne, sauf stdClass.

### Exemples

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

### Voir aussi

- Objet paresseux
- ReflectionClass::newLazyGhost() - Créer une nouvelle instance fantôme paresseuse
- ReflectionClass::newInstanceWithoutConstructor() - Crée une nouvelle instance de la classe sans invoquer le constructeur
- ReflectionClass::resetAsLazyProxy() - Réinitialise un objet et le marque comme paresseux
- ReflectionClass::markLazyObjectAsInitialized() - Marque un objet paresseux comme initialisé sans appeler l'initialiseur ou la fabrique
- ReflectionClass::initializeLazyObject() - Force l'initialisation d'un objet paresseux
- ReflectionClass::isUninitializedLazyObject() - Vérifie si un objet est paresseux et non initialisé
- ReflectionProperty::setRawValueWithoutLazyInitialization() - Définit la valeur brute d'une propriété sans déclencher l'initialisation paresseuse
- ReflectionProperty::skipLazyInitialization() - Marque une propriété comme non paresseuse
- ReflectionProperty::isLazy() - Vérifie si une propriété est paresseuse

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