Создаёт новый экземпляр ленивого призрака

# ReflectionClass::newLazyGhost

(PHP 8 >= 8.4.0)

ReflectionClass::newLazyGhost — Создаёт новый экземпляр ленивого призрака

### Описание

public function ReflectionClass::newLazyGhost(callable `$initializer`, int `$options` = 0): object

Метод создаёт новый ленивый экземпляр-призрак класса и прикрепляет к экземпляру ленивого призрака инициализатор `initializer`. Конструктор класса не вызывается, и свойствам не устанавливаются их значения по умолчанию. Однако инициализатор `initializer` автоматически вызывается и инициализирует объект при первом наблюдении за объектом или первой модификации объекта. Смотрите описания, которые содержатся в секциях «Триггеры инициализации» и «Последовательность инициализации».

### Список параметров

`initializer`
  Инициализатор — callback-функция со следующей сигнатурой:

  function initializer(object `$object`): void
  `object`
    Параметр `object` принимает объект инициализации. На этом этапе объект перестаёт быть ленивым, а обращение к объекту не запускает повторную инициализацию.
  Функция обратного вызова `initializer` должна возвращать `null` или не возвращать никакого значения.
`options`

  Параметр `options` принимает комбинацию следующих флагов:

  `ReflectionClass::SKIP_INITIALIZATION_ON_SERIALIZE`
    По умолчанию сериализация ленивого объекта запускает его инициализацию. Установка этого флага предотвращает инициализацию и разрешает сериализовать ленивые объекты без инициализации.

### Возвращаемые значения

Метод возвращает экземпляр ленивого призрака. Метод возвращает стандартный, а не ленивый экземпляр, если у объекта нет свойств или все свойства объекта статические или виртуальные. Смотрите также описание, которое содержит секция «Жизненный цикл ленивых объектов».

### Ошибки

Метод выбросит ошибку Error, если класс окажется внутренним или расширяет внутренний класс, если только это не класс stdClass.

### Примеры

Пример #1 Базовый пример создания нового экземпляра ленивого призрака

    <?php

    class Example
    {
        public function __construct(public int $prop)
        {
            echo __METHOD__, "\n";
        }
    }

    $reflector = new ReflectionClass(Example::class);
    $object = $reflector->newLazyGhost(function (Example $object) {
         $object->__construct(1);
    });

    var_dump($object);
    var_dump($object instanceof Example);

    // Запускает инициализацию и получает свойство после этого
    var_dump($object->prop);

    ?>

Результат выполнения приведённого примера:

    lazy ghost object(Example)#3 (0) {
      ["prop"]=>
      uninitialized(int)
    }
    bool(true)
    Example::__construct
    int(1)

### Смотрите также

- Ленивые объекты
- ReflectionClass::newLazyProxy() - Создает новый экземпляр ленивого прокси
- ReflectionClass::newInstanceWithoutConstructor() - Создаёт новый экземпляр класса без вызова конструктора
- ReflectionClass::resetAsLazyGhost() - Сбрасывает и помечает объект ленивым
- ReflectionClass::markLazyObjectAsInitialized() - Помечает ленивый объект как инициализированный без вызова инициализатора или фабрики
- ReflectionClass::initializeLazyObject() - Принудительно инициализирует ленивый объект
- ReflectionClass::isUninitializedLazyObject() - Проверяет, ленив ли и неинициализирован ли объект
- ReflectionProperty::setRawValueWithoutLazyInitialization() - Устанавливает необработанное значение свойства без запуска ленивой инициализации
- ReflectionProperty::skipLazyInitialization() - Помечает свойство как неленивое
- ReflectionProperty::isLazy() - Проверяет, лениво ли свойство

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