gpt4 book ai didi

php - 在 PHP 中延迟加载公共(public)类数据成员

转载 作者:行者123 更新时间:2023-12-04 05:46:16 25 4
gpt4 key购买 nike

我想在 PHP 中延迟加载一个类的公共(public)数据成员。假设我们有以下类:

<?php
class Dummy
{
public $name;
public $age;
public $status_indicator;
}
?>

如果 $name$age$status_indicator 是私有(private)数据成员,我会通过它们的 getter 方法延迟加载它们,但由于它们是公开的——我不清楚如何延迟加载它们。这可能吗?

编辑:有人评论说有一个方法叫做 __get 可能有助于解决这个问题,但我没看懂。

最佳答案

您可以使用 __get模拟在第一次访问时真正动态加载的公共(public)成员。当您尝试访问对象的未定义成员时,PHP 将调用 __get 并将您尝试访问的成员的名称传递给它。例如,访问 $x->my_variable 将调用 __get("my_variable") 如果该类定义了 __get_ 方法。

在这个例子中,$dummy->name 间接调用了 getter 方法 getName,它首先初始化了一个名为 $_name 的私有(private)成员访问:

<?php
class Dummy
{
private $_name;

public function __get($var) {
if ($var == 'name') {
return $this->getName();
} else if ($var == 'age') {
// ...
} else {
throw "Undefined variable $var";
}
}

public function getName() {
if (is_null($this->_name)) {
// Initialize and cache the value for $name
$this->_name = expensive_function();
}
return $this->_name;
}
}

$dummy = new Dummy();
echo $dummy->name;

您可以类似地定义和调用其他访问器,例如 getAge

关于php - 在 PHP 中延迟加载公共(public)类数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10640744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com