0

刚刚在一个网站上看到了这个源代码,但是不知道是什么意思,谁能告诉我是什么意思?太感谢了。

private function buildCache()
{
    !empty($this->cache_list) && $this->cache->loadCache($this->cache_list);
}
4

3 回答 3

4

这是很难支持的糟糕代码的例子。

!empty($this->cache_list) && $this->cache->loadCache($this->cache_list);语句等价于$dummy = !empty($this->cache_list) && $this->cache->loadCache($this->cache_list);

有惰性求值之类的东西,因此A && B,B将只求值为A真(否则A && B是故意为假,无需求值B)。基本上$x = a() && b()是一样的

$x = true;
if(!a()) {
    $x = false;
} else {
    $x = b();
}

因此,我们可以将原始语句扩展为

$dummy = true;
if(empty($this->cache_list)) {
    $dummy = false;
} else {
    $dummy = $this->cache->loadCache($this->cache_list);
}

其中,记住我们不需要$dummy变量,与

if(!empty($this->cache_list)) {
    $this->cache->loadCache($this->cache_list);
}

尽管此代码比原始代码长 2 行,但它更易于理解和维护。您应该编写类似于此最终版本的代码,并避免编写类似于原始单行的任何内容。

您可以自己看到:虽然您很难说出原始单行中发生了什么(如此之难,以至于您不得不在 SO 上提出问题),但很容易看到发生了什么最终版本:如果 thecache_list不为空,我们将调用作为参数loadCache传递cache_list给它(否则,如果 the为空,则调用将空值作为参数传递给它cache_list可能毫无意义)。loadCache

于 2012-04-18T05:41:31.397 回答
0

这意味着 if$this->cache_list不为空并且$this->cache->loadCache()函数返回 true

于 2012-04-18T05:41:21.310 回答
0

我想这是一个捷径:

private function buildCache()
{
    if( ! empty($this->cache_list)){
        $this->cache->loadCache($this->cache_list);
    }
}

如果有一个'cache_list',它会加载它。您必须查看类或框架文档以获取有关这些操作的更多信息。

于 2012-04-18T05:43:11.130 回答