web-dev-qa-db-fra.com

Dois-je inclure "else" et/ou "endif"?

Je me rends compte que c’est peut-être une question php générique, mais comme elle est liée à WP, je l’inclus ici.

Si j'ajoute une simple condition à mon modèle page.php, dois-je inclure un 'else' (pour les autres pages) et un 'endif'?

<?php
if (is_tree(39)) : get_template_part('templates/partial/menu-buy');
elseif (is_tree(117)) : get_template_part('templates/partial/menu-programs');
?>

À part une "condition vide" (je ne sais pas si c'est le bon mot), je ne vois pas comment inclure un "autre" pour les autres pages.

Mes connaissances limitées suggèrent que c'est probablement une bonne pratique de terminer avec 'endif', mais j'ai vu des conditionnels écrits avec/sans 'endif' et je me demande donc si c'est nécessaire.

MISE À JOUR: Merci à ceux qui ont répondu, je réalise maintenant qu'il existe deux formes de syntaxe différentes: http://php.net/manual/en/control-structures.alternative-syntax.php PHP propose une syntaxe alternative pour certaines de ses structures de contrôle; à savoir, si, tant que, pour, pour, et basculer. Dans chaque cas, la forme de base de la syntaxe alternative consiste à changer l'accolade d'ouverture en deux points (:) et l'accolade de fermeture en endif ;, endwhile ;, endfor ;, endfor ;, endforeach;.

1
glvr

Vous avez juste besoin d'un bloc 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
}

En ce qui concerne "c'est probablement une bonne pratique de terminer avec 'endif'", endif n'est utilisé que lorsque vous utilisez la syntaxe de modélisation:

if():
    //do stuff
endif;

l'alternative est la syntaxe des accolades régulières:

if(){
    //do stuff
}

La première solution est préférable lorsque vous sortez du code HTML en abandonnant php avec une balise php de fermeture, car une endif est plus facile à apparier qu'une accolade de fermeture:

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

CONTRE:

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

Cependant, lorsque vous écrivez du code qui n'abandonne pas le mode PHP, ce dernier est beaucoup plus courant et plus facile à lire:

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

    $out[$username]=[];

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

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

    }

}
3
Steve

Bien @ gulliver, c'est un peu une question d'opinion. Nous utilisons réellement endif pour mettre fin à la if condition. Si vous êtes dans une condition où une chose peut changer en fonction d'une condition, vous devez utiliser l'instruction else. Comme ci-dessous

if('statement' == true ) {
    // do only when the statement is true
} else {
    // do only when the statement is false
}
// execute the other codes.

Notez que dans le cas ci-dessus, vous pouvez ignorer le bloc else si vous faites return. La cause PHP n'exécutera rien après return. Donc, le code sera-

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.

Maintenant, les blocs de code ci-dessus peuvent être écrits comme ci-dessous avec une procédure différente en utilisant if():, else et endif-

Premiers blocs de code -

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

Deuxième blocs de code -

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.

Maintenant, décidez vous-même si vous devez inclure else et/ou endif. Posez n'importe quelle question dans laquelle vous devez en savoir plus.

2
CodeMascot

endifest sorti de style il y a quelques années, il faut juste éviter de l'utiliser. La principale raison qui me vient à l’esprit est le manque de détection de "blocage" par les éditeurs, ce qui rend plus difficile l’équilibrage de ifname__s.

OTOH, vous devriez probablement toujours en avoir une autre, même si elle est vide. L'idée est que vous montrez que vous avez réellement pensé à ce qui se passe dans la condition échoue. À l'heure actuelle, votre extrait de code peut ne pas avoir de sortie, est-ce intentionnel?

La meilleure chose à faire est probablement d’utiliser un linter qui vérifie la norme de codage wordpress (ou wordpress.com VIP). Ils sont critiqués, mais il est préférable d’avoir une norme de codage que de n’en avoir aucune, et un outil automatique qui l’expérimentera vous aidera à la suivre.

1
Mark Kaplun