164 votes

Différence entre if () { } et if () : endif ;

Y a-t-il des différences entre...

if ($value) {

}

...et...

if ($value):

endif;

?

0 votes

La seconde méthode existe depuis PHP4, si ce n'est plus tôt.

0 votes

1 votes

La plupart des réponses n'abordent pas vraiment le point principal : ce qui fonctionne mieux lorsque vous regardez du code et qu'il y a beaucoup de commandes de fermeture telles que } } } } (ce qui peut être fait avec endif aussi) et vous voulez savoir où ils étaient ouverts ? La réponse est ni l'un ni l'autre . C'est en gros le première "règle" des principes de conception de python .

5voto

Rob Kennedy Points 107381

Il n'y a pas de différence technique entre les deux syntaxes. La syntaxe alternative n'est pas nouvelle ; elle était supportée au moins depuis PHP 4, et peut-être même avant.

Vous pouvez préférer la forme alternative car elle indique explicitement quelle structure de contrôle se termine : endwhile par exemple, ne peut mettre fin à une while alors que si vous rencontrez une accolade, elle peut fermer n'importe quoi.

Vous pouvez toutefois préférer la syntaxe traditionnelle si vous utilisez un éditeur qui prend spécialement en charge les accolades dans d'autres syntaxes de type C. Vim, par exemple, prend en charge plusieurs touches permettant de naviguer vers les accolades correspondantes et vers les débuts et fins de blocs délimités par des accolades. La syntaxe alternative casserait cette fonctionnalité de l'éditeur.

3voto

Bondt Points 578

En fin de compte, vous n'avez pas envie de chercher la ligne suivante et de devoir deviner où elle a commencé :

<?php } ?>

Techniquement et fonctionnellement, ils sont identiques.

3voto

Yi Yang Points 21

Tout dépend, personnellement je préfère la syntaxe traditionnelle avec des échos et beaucoup d'indentations, car elle est tellement plus facile à lire.

<?php
    if($something){
        doThis();
    }else{
        echo '<h1>Title</h1>
            <p>This is a paragraph</p>
            <p>and another paragraph</p>';
    }
?>

Je reconnais que la syntaxe de l'alt est plus propre avec les différentes clauses finales, mais j'ai vraiment du mal à les gérer sans l'aide de la mise en évidence de l'éditeur de texte, et je ne suis tout simplement pas habitué à voir du code "condensé" comme celui-ci :

<?php if( $this->isEnabledViewSwitcher() ): ?>
<p class="view-mode">
    <?php $_modes = $this->getModes(); ?>
    <?php if($_modes && count($_modes)>1): ?>
    <label><?php echo $this->__('View as') ?>:</label>
    <?php foreach ($this->getModes() as $_code=>$_label): ?>
        <?php if($this->isModeActive($_code)): ?>
            <strong title="<?php echo $_label ?>" class="<?php echo strtolower($_code); ?>"><?php echo $_label ?></strong>&nbsp;
        <?php else: ?>
            <a href="<?php echo $this->getModeUrl($_code) ?>" title="<?php echo $_label ?>" class="<?php echo strtolower($_code); ?>"><?php echo $_label ?></a>&nbsp;
        <?php endif; ?>
    <?php endforeach; ?>
    <?php endif; ?>
</p>
<?php endif; ?>

2voto

J'avais l'habitude d'utiliser les accolades mais aujourd'hui, je préfère utiliser cette syntaxe alternative plus courte pour des raisons de lisibilité et d'accessibilité du code.

2voto

henrik Points 11

Personnellement, je préfère le faire en deux sections distinctes mais dans le même PHP, par exemple :

<?php 
    if (question1) { $variable_1 = somehtml; }
    else { $variable_1 = someotherhtml; } 

    if (question2) {
        $variable_2 = somehtml2;
    }

    else { 
        $variable_2 = someotherhtml2;
    }         

etc.
$output=<<<HERE
htmlhtmlhtml$variable1htmlhtmlhtml$varianble2htmletcetcetc
HERE;
echo $output;

?>

Mais peut-être que c'est plus lent ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X