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 .

183voto

Thomaschaaf Points 5901

Ils sont identiques, mais le second est idéal si votre code est de type MVC et que vous ne voulez pas avoir beaucoup d'échos dans votre code. Par exemple, dans mon .phtml (Zend Framework), je vais écrire quelque chose comme ceci :

<?php if($this->value): ?>
Hello
<?php elseif($this->asd): ?>
Your name is: <?= $this->name ?>
<?php else: ?>
You don't have a name.
<?php endif; ?>

0 votes

@ alex - Je pense que oui. Cependant, si vous cherchez stringtemplate (en un seul mot) sur Google, vous verrez qu'ils utilisent une syntaxe très similaire pour résoudre ce même problème. Je suppose que l'on pourrait dire que le code est plus propre ? Peut-être que c'est commun pour les templates/langues interprétées...

38 votes

@alex Cela fonctionnera aussi avec des crochets frisés, mais au moins personnellement je trouve cette façon plus claire dans des choses comme ça. Parce qu'ils savent que c'est la fin d'un if, et non la fin d'une boucle ou autre chose. Je pense que vous avez aussi endfor et endwhile ou quelque chose de similaire.

10 votes

Je n'utiliserais pas le <?= ?> parce qu'il n'est pas pris en charge par tous les serveurs, notamment ceux de l'hébergement mutualisé qui ne permettent pas de modifier le php.ini.

70voto

dprevite Points 518

Personnellement, je déteste vraiment la syntaxe alternative. Ce qui est bien avec les accolades, c'est que la plupart des IDE, vim, etc. ont une mise en évidence des accolades. Dans mon éditeur de texte, je peux double-cliquer sur une accolade et l'ensemble du morceau est mis en surbrillance, ce qui me permet de voir très facilement où il commence et où il se termine.

Je ne connais pas un seul éditeur qui puisse mettre en évidence les endif, endforeach, etc.

12 votes

Il est censé être utilisé dans les modèles PHP, où le début et la fin du bloc sont séparés par un morceau de langue étrangère. Si votre IDE comprend suffisamment bien PHP pour analyser cela, il devrait également mettre en évidence les éléments suivants endif comme fin de bloc correctement. Si ce n'est pas le cas, vous n'achetez rien en utilisant la fonction } car il ne correspondra pas de toute façon.

2 votes

La plupart des ide (du moins ceux que j'ai utilisés) ne mettent en évidence que les { }.

11 votes

Netbeans 7.x met heureusement en évidence les endforeach, endif, etc. correspondants.

51voto

Je pense que ça dit tout :

cette syntaxe alternative est excellente pour améliorer la lisibilité (à la fois pour PHP et HTML !) dans les situations où vous vous avez un mélange des deux.

http://ca3.php.net/manual/en/control-structures.alternative-syntax.php

Lorsque l'on mélange HTML et PHP, l'alternative sytnax est beaucoup plus facile à lire. Dans les documents PHP normaux, la syntaxe traditionnelle doit être utilisée.

29voto

gahooa Points 38006

Dans notre entreprise, la méthode préférée de traitement du HTML est la suivante :

<? if($condition) { ?>
   HTML content here
<? } else { ?>
   Other HTML content here
<? } ?>

En fin de compte, il s'agit vraiment d'en choisir un et de s'y tenir.

0 votes

Merci. J'ai mis à jour cette réponse. Elle tourne un peu autour du pot, mais peut être utile.

0 votes

Qui voulez-vous dire quand vous dites "notre" ?

0 votes

+1 pour éviter les déclarations d'écho excessives et les guillemets échappés :)

13voto

Cawas Points 3303

Ils sont en effet tous deux identiques, sur le plan fonctionnel.

Mais si le endif s'éloigne trop du correspondant if Je pense que c'est une bien meilleure pratique de lui donner un commentaire de référencement. Pour que vous puissiez facilement retrouver l'endroit où il a été ouvert. Quelle que soit la langue :

if (my_horn_is_red or her_umbrella_is_yellow)
{

    // ...

    // let's pretend this is a lot of code in the middle

    foreach (day in week) {
        sing(a_different_song[day]);
    }

    // ...

} //if my_horn_is_red

Cela s'applique en fait à toute "fermeture" analogue ! ;)

De plus, en général, les éditeurs sont plus à l'aise avec les accolades, dans le sens où ils peuvent vous indiquer l'endroit où le texte a été ouvert. Mais même cela ne rend pas les commentaires descriptifs moins valables.

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