Помечает ленивый объект как инициализированный без вызова инициализатора или фабрики

# ReflectionClass::markLazyObjectAsInitialized

(PHP 8 >= 8.4.0)

ReflectionClass::markLazyObjectAsInitialized — Помечает ленивый объект как инициализированный без вызова инициализатора или фабрики

### Описание

public function ReflectionClass::markLazyObjectAsInitialized(object `$object`): object

Метод помечает ленивый объект как инициализированный без вызова инициализатора или фабрики. Метод ничего не сделает, если в параметр `object` передали не ленивый объект или объект уже инициализировали.

Вызов метода выполняет те же операции, которые — независимо от стратегии лени объекта `object` — описывает секция «Последовательность инициализации» для объектов-призраков, за исключением того, что инициализатор не вызывается. После вызова метода объект становится неотличим от объекта, который никогда не был ленивым и который создали методом ReflectionClass::newInstanceWithoutConstructor(), за исключением значений свойств, которые уже инициализировали методом ReflectionProperty::setRawValueWithoutLazyInitialization() или ReflectionProperty::skipLazyInitialization().

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

`object`
  Объект, который требуется пометить как инициализированный.

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

Метод возвращает объект `object`, который в случае успешного выполнения пометил как инициализированный.

### Примеры

Пример #1 Пример пометки неинициализированного ленивого объекта как инициализированного

    <?php

    class Example
    {
        public string $prop1;
        public string $prop2;
        public string $prop3 = 'default value';
    }

    $reflector = new ReflectionClass(Example::class);

    $object = $reflector->newLazyGhost(function ($object) {
        echo "Initializer called\n";
        $object->prop1 = 'initialized';
    });

    $reflector->getProperty('prop1')
              ->setRawValueWithoutLazyInitialization($object, 'prop1 value');

    var_dump($object);

    $reflector->markLazyObjectAsInitialized($object);

    var_dump($object);

    ?>

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

    lazy ghost object(Example)#3 (1) {
      ["prop1"]=>
      string(11) "prop1 value"
      ["prop2"]=>
      uninitialized(string)
      ["prop3"]=>
      uninitialized(string)
    }
    object(Example)#3 (2) {
      ["prop1"]=>
      string(11) "prop1 value"
      ["prop2"]=>
      uninitialized(string)
      ["prop3"]=>
      string(13) "default value"
    }

Пример #2 Пример пометки инициализированного ленивого объекта как инициализированного

    <?php

    class Example
    {
        public string $prop1;
        public string $prop2;
        public string $prop3 = 'default value';
    }

    $reflector = new ReflectionClass(Example::class);

    $object = $reflector->newLazyGhost(function ($object) {
        echo "Initializer called\n";
        $object->prop1 = 'initialized';
    });

    $reflector->getProperty('prop1')
        ->setRawValueWithoutLazyInitialization($object, 'prop1 value')
    ;

    var_dump($object->prop3);
    var_dump($object);

    $reflector->markLazyObjectAsInitialized($object);

    var_dump($object);

    ?>

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

    Initializer called
    string(13) "default value"
    object(Example)#3 (2) {
      ["prop1"]=>
      string(11) "initialized"
      ["prop2"]=>
      uninitialized(string)
      ["prop3"]=>
      string(13) "default value"
    }
    object(Example)#3 (2) {
      ["prop1"]=>
      string(11) "initialized"
      ["prop2"]=>
      uninitialized(string)
      ["prop3"]=>
      string(13) "default value"
    }

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

- Ленивые объекты
- ReflectionClass::newLazyGhost() - Создаёт новый экземпляр ленивого призрака
- ReflectionClass::initializeLazyObject() - Принудительно инициализирует ленивый объект
- ReflectionClass::isUninitializedLazyObject() - Проверяет, ленив ли и неинициализирован ли объект

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