一个简单的PHP逻辑


a simple php logic

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

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

这是难以支持的不良代码示例。

!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 上提问),但很容易看到最终版本中发生了什么:如果cache_list不为空,我们调用loadCache传递cache_list作为参数(否则, 如果cache_list为空,则调用loadCache将空值传递给它作为参数可能毫无意义)。

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

我想这是以下方面的快捷方式:

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

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