web-dev-qa-db-ja.com

Elseまたはendifを含める必要がありますか?

これは一般的なphpの質問かもしれないが、WPに関連しているので、ここに含めます。

私のpage.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');
?>

「空の状態」(それが正しいWordかどうかわからない)以外に、他のページに「else」を含める方法が見当たりません。

私の限られた知識では 'endif'で終わるのがおそらく良い習慣であることを示唆していますが、 'endif'の有無にかかわらず書かれた条件文を見たので、それが必要かどうか疑問に思います。

更新:答えてくれた人たちのおかげで、私は今2つの異なる形式の構文があることに気づく: http://php.net/manual/en/control-structures.alternative-syntax.php PHPはその制御構造のいくつかに対して代替構文を提供します。つまり、もしあれば、その間、for、foreach、そしてswitch。いずれの場合も、代替構文の基本形式は左中括弧をコロン(:)に、右中括弧をendif;、endwhile;、endfor;、endforeach;、またはendswitch;にそれぞれ変更することです。

1
glvr

あなただけの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'で終わるのはおそらく良い習慣です」に関しては、endifname__はテンプレート構文を使っているときにだけ使われます。

if():
    //do stuff
endif;

代替手段は通常の中括弧の構文です。

if(){
    //do stuff
}

endifname__は右中括弧よりも一致させるのが簡単なので、phpタグを閉じてphpからドロップしてhtmlを出力する場合は前者の方が適しています。

<?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;

    }

}
3
Steve

それはちょっとした意見に基づいた質問です。実際に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():elseおよびendif-を使用して、以下のように異なる手順で書くことができます。

最初のコードブロック -

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

2番目のコードブロック -

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.

elseendifを含める必要があるかどうかを自分で決めてください。あなたにどんなちょっとした質問をすることはもっともっと知る必要があります。

2
CodeMascot

endifは、何年も前に廃止されました。使用しないでください。私の頭に浮かぶ主な理由はifsのバランスをとることを難しくする編集者による「ブロック」検出の欠如です。

OTOHあなたはおそらくそれが空のものであってもおそらく他にもあるべきです。アイデアは、あなたが実際にその状態で何が起こるかについて考えたことが失敗することを示すということです。今のところあなたのスニペットには何も出力がないかもしれません、それは意図的なものですか?

最善の方法は、おそらくwordpress(またはwordpress.com VIP)コーディング標準に照らしてチェックするリンターを使用することです。それらに対する批判があります、しかし、どんなコーディング標準を持つことはそれを持たないより良い、そしてそれをテストする自動ツールはあなたが実際にそれに従うのを助けます。

1
Mark Kaplun