PHP Conference Nagoya 2025

ReflectionClass::markLazyObjectAsInitialized

(PHP 8 >= 8.4.0)

ReflectionClass::markLazyObjectAsInitializedMarque un objet paresseux comme initialisé sans appeler l'initialiseur ou la fabrique

Description

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

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

Liste de paramètres

object
L'objet à marquer comme initialisé.

Valeurs de retour

Renvoie object.

Exemples

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

Voir aussi

add a note

User Contributed Notes

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