(PHP 8 >= 8.4.0)
ReflectionClass::markLazyObjectAsInitialized — 將惰性物件標記為已初始化,而不呼叫初始化器或工廠函式
將惰性物件標記為已初始化,而不呼叫初始化器或工廠函式。如果 object
不是惰性物件或已經初始化,則此方法沒有作用。
呼叫此方法的效果與在初始化順序中針對 Ghost 物件所描述的相同(與 object
的惰性策略無關),但初始化器不會被呼叫。之後,該物件與從未使用惰性策略且使用 ReflectionClass::newInstanceWithoutConstructor() 建立的物件沒有區別,除了已使用 ReflectionProperty::setRawValueWithoutLazyInitialization() 或 ReflectionProperty::skipLazyInitialization() 初始化的屬性值之外。
object
回傳 object
。
範例 #1 將未初始化的惰性物件標記為已初始化
<?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 "初始化器已呼叫\n";
$object->prop1 = 'initialized';
});
$reflector->getProperty('prop1')
->setRawValueWithoutLazyInitialization($object, 'prop1 value');
var_dump($object);
$reflector->markLazyObjectAsInitialized($object);
var_dump($object);
?>
上述範例將輸出
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" }
範例 #2 將已初始化的物件標記為已初始化
<?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);
?>
上述範例將輸出
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" }