1

我有这个简单的 if 代码:

哪个更好,用 esleif 做还是做两个单独的 if?

if(is_home() && $currentpage == ''){ 
    $catname = 'cars';
} elseif(is_home() && $currentpage != '' && is_page_template('models.php')){ 
    $catname = 'newcars';
} 

两个单独的 if 子句:

if(is_home() && $currentpage == ''){ 
    $catname = 'cars';
} 
if(is_home() && $currentpage != '' && is_page_template('models.php')){ 
    $catname = 'newcars';
} 

if 的顺序重要吗?如果在第一个之前,我可以放置第二个吗?问题应该是 php 如何处理从更具体到更一般的条件?您是否应该始终从更具体的开始,然后逐步发展到一般?或者php可以对它们进行排序?

第二个版本对我来说会更容易,因为我已经分配了 if :)

4

4 回答 4

5

这取决于你想要什么行为:

如果使用elseif,则只会执行第一个匹配的块。

$foo = $bar = true;
if($foo) { /* executed */ }
elseif($bar) { /* not executed */ }

当使用单独的if子句时,所有匹配的块都将执行:

$foo = $bar = true;
if($foo) { /* executed */ }
if($bar) { /* also executed */ }

如果条件不同,即只有一个是真的,那并不重要。但是,通过使用elseif您可以避免无用的检查,因为一旦一个条件评估为真,就不需要检查其他条件。

于 2012-08-07T23:19:20.003 回答
3

为了脚本优化,我会推荐 elseifs 以避免运行额外的不必要的条件。

如果可能,我建议使用 switch/case 语句(您可以在其中检查单个变量的值)。从减少杂乱的角度来看,它们更干净,更容易维护。

多个 if 语句(而不是 elseif 语句)的一个问题是它使调试问题变得更加复杂。你怎么知道第二个语句没有覆盖第一个语句,或者你的条件逻辑对每个语句都是正确的?使用多个 if 会增加一个条件覆盖另一个条件的可能性。开始在这些 if 语句中添加多个变量,它会开始伤害你的大脑。

于 2012-08-07T23:19:57.867 回答
1
if (is_home()) { 

    if ($currentpage == '') {

        $catname = 'cars';
    }
    else if (is_page_template('models.php')) {

        $catname = 'newcars';
    }       
}
于 2012-08-07T23:19:29.767 回答
1

我会去,

if(is_home()) {
    if($currentpage == '') {
        $catname = 'cars';
    }
    elseif(is_page_template('models.php')) { 
        $catname = 'newcars';
    }
} 
于 2012-08-07T23:26:16.707 回答