我需要包括‘Else’和/或‘endif’吗?

时间:2017-05-30 作者:glvr

我意识到这可能是一个通用的php问题,但由于它与WP有关,我将其包括在这里。

如果向我的页面添加简单条件。php模板,是否需要包含“else”(对于其他页面)和“endif”?

<?php
if (is_tree(39)) : get_template_part(\'templates/partial/menu-buy\');
elseif (is_tree(117)) : get_template_part(\'templates/partial/menu-programs\');
?>
除了“空条件”(不知道这个词是否正确)之外,我看不到为其他页面包含“else”的方法。

我有限的知识表明,以“endif”结尾可能是一种很好的做法,但我看到过有/没有“endif”的条件句,因此怀疑它是否有必要。

更新:多亏了那些回答我的人,我现在意识到有两种不同的语法形式:http://php.net/manual/en/control-structures.alternative-syntax.phpPHP为它的一些控制结构提供了另一种语法;即if、while、for、foreach和switch。在每种情况下,备用语法的基本形式是将左大括号更改为冒号(:),将右大括号更改为endif;,结束时;,endfor;,endforeach;,或endswitch;,分别地

3 个回复
最合适的回答,由SO网友:Steve 整理而成

您只需要一个else块:

//templating syntax
if($condOne):
    //do stuff if $condOne is true
elseif($condTwo):
    //do stuff if $condOne is false and $condTwo is true
else:
    //do stuff if both $condOne and $condTwo are false
endif;

//braces syntax
if($condOne){
    //do stuff if $condOne is true
}elseif($condTwo){
    //do stuff if $condOne is false and $condTwo is true
else{
    //do stuff if both $condOne and $condTwo are false
}
关于“以‘endif’结尾可能是一种好的做法”,endif 仅在使用模板语法时使用:

if():
    //do stuff
endif;
另一种方法是常规大括号语法:

if(){
    //do stuff
}
在输出html时,最好使用关闭的php标记退出php,因为endif 比右括号更容易匹配:

<?php if($someCondition):?>

   <h1>Hello <?=$userName?>, how are you today?</h1>
   <ul>
   <?php foreach($someArray as $key => $value):?>
       <li><?=$key?> : <?=$value?></li>
   <?php endforeach;?>
   </ul>

<?php endif;?>
VS:

<?php if($someCondition){?>

   <h1>Hello <?=$userName?>, how are you today?</h1>
   <ul>
   <?php foreach($someArray as $key => $value){?>
       <li><?=$key?> : <?=$value?></li>
   <?php }?>
   </ul>

<?php }?>
但是,在编写不退出php模式的代码时,后者更常见,更易于阅读:

$out=[];
if($someCondition){

    $out[$username]=[];

    foreach($someArray as $key => $value){

        $out[$username][] = $key . \' : \' . $value;

    }

}

SO网友:CodeMascot

嗯,格列佛,这是一个基于观点的问题。看我们实际使用endif 结束if 有条件的如果您处于某个条件下,某个事物可能会根据某个条件发生变化,那么您必须使用else 陈述如下所示-

if(\'statement\' == true ) {
    // do only when the statement is true
} else {
    // do only when the statement is false
}
// execute the other codes.
注意,在上述情况下,您可以跳过else 如果您这样做,请阻止return. 因为PHP在return. 所以代码是-

if(\'statement\' == true ) {
    // do only when the statement is true        
    return 0;
    // Rest of the part will not be executed.
}
// This part will only execute when the statement is false.
现在,可以使用以下不同的过程编写上述代码块if():, elseendif-

First code blocks-

if(\'statement\' == true ) :
    // do only when the statement is true
else :
    // do only when the statement is false
endif;
// execute the other codes.
Second Code Blocks-

if(\'statement\' == true ) :
    // do only when the statement is true        
    return 0;
    // Rest of the part will not be executed.
endif;
// This part will only execute when the statement is false.
现在自己决定是否需要包括else and/or endif. 问任何你需要进一步了解的问题。

SO网友:Mark Kaplun

endif 多年前就过时了,应该避免使用它。我脑海中浮现的主要原因是编辑缺乏“块”检测,这使得平衡if这很难。

OTOH你应该一直有一个else,即使它是一个空的。这个想法是,你要表明你确实想过在条件失败时会发生什么。现在您的代码片段可能没有输出,这是故意的吗?

最好的方法可能是使用一个linter来检查wordpress(或wordpress.com VIP)编码标准。有人批评他们,但有任何编码标准都比没有好,而测试它的自动工具可以帮助您实际遵循它。

结束

相关推荐