我想在 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/