PHP Conference Nagoya 2025

ReflectionClass::markLazyObjectAsInitialized

(PHP 8 >= 8.4.0)

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

Описание

public 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"
}

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

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top