(PHP 8 >= 8.4.0)
ReflectionClass::markLazyObjectAsInitialized — Помечает ленивый объект как инициализированный без вызова инициализатора или фабрики
Метод помечает ленивый объект как инициализированный без вызова инициализатора
или фабрики. Метод ничего не сделает, если в параметр 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" }