(PHP 8 >= 8.4.0)
ReflectionClass::markLazyObjectAsInitialized — Marca un objeto perezoso como inicializado sin llamar al inicializador o a la fábrica
Marca un objeto perezoso como inicializado sin llamar al inicializador o
a la fábrica. Esto no tiene ningún efecto si object
no es
perezoso o ya está inicializado.
El efecto de la llamada a este método es el mismo que se describe para los objetos fantasma
(independientemente de la estrategia perezosa de object
) en
secuencia
de inicialización, excepto que no se llama al inicializador.
Después de esto, el objeto es indistinguible de un objeto que nunca fue perezoso y
fue creado con
ReflectionClass::newInstanceWithoutConstructor(),
excepto por el valor de las propiedades que ya han sido inicializadas con
ReflectionProperty::setRawValueWithoutLazyInitialization()
o ReflectionProperty::skipLazyInitialization().
object
Devuelve object
.
Ejemplo #1 Marcar un objeto perezoso no inicializado como inicializado
<?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);
?>
El resultado del ejemplo sería:
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" }
Ejemplo #2 Marcar un objeto perezoso inicializado como inicializado
<?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);
?>
El resultado del ejemplo sería:
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" }