gpt4 book ai didi

php - 在延迟加载中避免条件

转载 作者:可可西里 更新时间:2023-11-01 12:53:36 25 4
gpt4 key购买 nike

澄清一下,我的意思是:

class foon {
private $barn = null;

public function getBarn() {
if (is_null($this->barn)) {
$this->barn = getBarnImpl();
}
return $this->barn;
}
}

当您并不总是需要 getBarn 并且 getBarn 特别昂贵(例如,有一个 DB 调用)时,这特别好。有什么办法可以避免条件?这占用了很多空间,看起来很丑,看到条件消失总是很好。是否有其他一些范例来处理我看不到的延迟加载?

最佳答案

通过使用php的__call()魔术方法,我们可以轻松编写一个装饰器对象,拦截所有方法调用,并缓存返回值。

有一次我做了这样的事情:

class MethodReturnValueCache {
protected $vals = array();
protected $obj;
function __construct($obj) {
$this->obj = $obj;
}
function __call($meth, $args) {
if (!array_key_exists($meth, $this->vals)) {
$this->vals[$meth] = call_user_func_array(array($this->obj, $meth), $args);
}
return $this->vals[$meth];
}
}

然后

$cachedFoon = new MethodReturnValueCache(new foon);
$cachedFoon->getBarn();

关于php - 在延迟加载中避免条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8750575/

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