PHP Conference Japan 2024

ReflectionClass::markLazyObjectAsInitialized

(PHP 8 >= 8.4.0)

ReflectionClass::markLazyObjectAsInitialized將惰性物件標記為已初始化,而不呼叫初始化器或工廠函式

說明

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

將惰性物件標記為已初始化,而不呼叫初始化器或工廠函式。如果 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"
}

另請參閱

新增註解

使用者貢獻的註解

此頁面沒有使用者貢獻的註解。
To Top