ReflectionClass::markLazyObjectAsInitialized

(PHP 8 >= 8.4.0)

ReflectionClass::markLazyObjectAsInitializedMarca un objeto perezoso como inicializado sin llamar al inicializador o a la fábrica

Descripción

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

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().

Parámetros

object
El objeto a marcar como inicializado.

Valores devueltos

Devuelve object.

Ejemplos

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

Ver también

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top