簡化理解的輔助函式
<?php
function createLazyGhost(
string $class,
?callable $initializer = null,
?array $propertySetterCallables = null
): object {
$reflection = new ReflectionClass($class);
return $reflection->newLazyGhost(function (object $object) use ($initializer, $propertySetterCallables) {
if ($initializer) {
$initializer($object);
}
if ($propertySetterCallables) {
foreach ($propertySetterCallables as $property => $callable) {
if (is_callable($callable)) {
$object->$property = $callable();
}
}
}
});
}
?>
這支援使用主要物件初始化器和/或屬性初始化器。
以下是一個範例,其中產生訂單 ID 和計算總額被認為是耗費資源的操作,因此我們只在必要時才執行
<?php
類別 訂單 {
public string $訂單編號 = '';
public float $總金額 = 0.0;
}
$初始化器 = function (訂單 $訂單) {
$訂單->訂單編號 = 'ORD12345';
};
$屬性設定器 = [
'總金額' => fn() => 200.75,
];
$延遲載入訂單 = 建立延遲載入物件(訂單::class, $初始化器, $屬性設定器);
echo $延遲載入訂單->訂單編號 . PHP_EOL;
echo $延遲載入訂單->總金額 . PHP_EOL;
?>