(PHP 8 >= 8.4.0)
ReflectionClass::newLazyGhost — Создаёт новый экземпляр ленивого призрака
Метод создаёт новый ленивый экземпляр-призрак класса и прикрепляет
к экземпляру ленивого призрака инициализатор initializer
. Конструктор класса не вызывается,
и свойствам не устанавливаются их значения по умолчанию. Однако инициализатор
initializer
автоматически вызывается и инициализирует объект
при первом наблюдении за объектом или первой модификации объекта.
Смотрите описания, которые содержатся в секциях
«Триггеры инициализации»
и «Последовательность инициализации».
initializer
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)