(PHP 8 >= 8.4.0)
ReflectionClass::markLazyObjectAsInitialized — Marque un objet paresseux comme initialisé sans appeler l'initialiseur ou la fabrique
Marque un objet paresseux comme initialisé sans appeler l'initialiseur ou
la fabrique. Cela n'a aucun effet si object
n'est pas
paresseux ou est déjà initialisé.
L'effect de l'appel de cette méthode est le même que décrit pour les objets fantômes
(peu importe la stratégie de paresse de object
) dans
séquence
d'initialisation, sauf que l'initialiseur n'est pas appelé.
Après cela, l'objet est indiscernable d'un objet qui n'était jamais paresseux et
a été créé avec
ReflectionClass::newInstanceWithoutConstructor(),
excepté pour la valeur des propriétés qui ont déjà été initialisées avec
ReflectionProperty::setRawValueWithoutLazyInitialization()
ou ReflectionProperty::skipLazyInitialization().
object
Renvoie object
.
Exemple #1 Marquer un objet paresseux non initialisé comme initialisé
<?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);
?>
L'exemple ci-dessus va afficher :
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" }
Exemple #2 Marquer un objet paresseux initialisé comme initialisé
<?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);
?>
L'exemple ci-dessus va afficher :
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" }