De toute évidence, {}c'est mieux et : endif;c'est une atrocité qui n'existerait pas si la vie était juste. Avec un bon éditeur de texte, vous aurez un raccourci clavier pour faire correspondre les crochets, pour vous faire passer de l'ouverture à la fermeture ou vice versa. Rien de tel n'existe ni ne pourrait jamais exister pour la : endif;syntaxe hideuse .
developerwjk
3
@developerwjk comment cela pourrait-il ne jamais exister?
alex
Réponses:
177
Ce sont les mêmes mais le second est génial si vous avez MVC dans votre code et que vous ne voulez pas avoir beaucoup d'échos dans votre code. Par exemple, dans mes .phtmlfichiers (Zend Framework), j'écrirai 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;?>
@alex Cela fonctionnera également avec les accolades, mais au moins personnellement, je trouve cette méthode plus claire dans des choses comme celle-ci. Parce qu'ils vous savent que c'est la fin d'un si, et non la fin d'une boucle d'une sorte ou de quelque chose d'autre. Pensez que vous avez une fin pour et une fin ou quelque chose de similaire aussi.
Svish
10
Je n'utiliserais pas le <? =?> Car il n'est pas pris en charge sur tous les serveurs, en particulier ceux d'hébergement partagé qui ne vous permettent pas de changer php.ini.
Siqi Lin
2
Le point pertinent est <? Php endif; ?> - vous pouvez dire exactement ce qui se termine même avec de nombreuses lignes de HTML entre le if / else précédent et cette instruction.
Fenton
7
pourquoi "le second est génial si vous ne voulez pas avoir beaucoup d'échos dans votre code"? Je pense qu'il en va de même pour la syntaxe traditionnelle {}. Aucun écho supplémentaire n'est nécessaire <?php if(...){ ?> ... <?php }else{ ?> ... <?php } ?>. Quelle est la différence avec <?php if(...): ?> ... <?php else: ?> ... <?php endif ?>?
Sithu
9
Je ne sais pas pourquoi cette réponse est la plus élevée, car ce n'est pas un bon exemple (vous pouvez obtenir exactement la même chose avec des accolades).
Reinier Kaper
69
Personnellement, je déteste vraiment la syntaxe alternative. Une bonne chose à propos des accolades est que la plupart des IDE, vim, etc. ont tous une mise en évidence de parenthèses. Dans mon éditeur de texte, je peux double-cliquer sur une accolade et cela mettra en évidence le morceau entier afin que je puisse voir où il se termine et commence très facilement.
Je ne connais pas un seul éditeur qui puisse mettre en évidence endif, endforeach, etc.
Ceci 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 assez bien PHP pour analyser cela, il doit également être mis endifen évidence correctement en tant que fin de bloc. Si ce n'est pas le cas, vous n'achetez vraiment rien en utilisant }car il ne correspondra pas de toute façon.
Pavel Minaev
2
La plupart des idées (du moins celles que j'ai utilisées) ne mettent en évidence que {}
AntonioCS
11
Netbeans 7.x met joyeusement en évidence les correspondances endforeach, endif, etc.
Jonathan Day
@Monsieur. Minaev: Le matcher d'accolades analysera correctement probablement dans 98% des cas, même s'il y a du code étranger à l'intérieur. Il n'échouera que s'il y a une accolade ézotérique "code d'ouverture mais pas de fermeture" à l'intérieur. Oui, cela arrive, mais cela arrive rarement. Pourquoi pensez-vous qu'une «fin-peu importe» complexe; approche parseur fera mieux pratiquement, que la solution simple?
PatlaDJ
Je pense que le point le plus important est d' être descriptif , au besoin. Ainsi, nous pouvons facilement trouver où il était ouvert, quel que soit l'outil que nous pourrions avoir besoin d'utiliser. Particulièrement vrai pour PHP, que vous devez de temps en temps voir en utilisant les éditeurs les plus simplistes.
cregox
49
Je pense que cela dit tout:
cette syntaxe alternative est excellente pour améliorer la lisibilité (à la fois pour PHP et HTML!) dans les situations où vous en avez un mélange.
Lorsque vous mélangez HTML et PHP, la syntaxe alternative est beaucoup plus facile à lire. Dans les documents PHP normaux, la syntaxe traditionnelle doit être utilisée.
Ils sont en effet tous les deux identiques, fonctionnellement.
Mais si le endifcorrespondant s'éloigne trop du correspondant, ifje pense qu'il est préférable de lui faire un commentaire de référence. Juste pour que vous puissiez facilement trouver où il était ouvert. Quelle que soit la langue utilisée:
if(my_horn_is_red or her_umbrella_is_yellow){// ...// let's pretend this is a lot of code in the middleforeach(day in week){
sing(a_different_song[day]);}// ...}//if my_horn_is_red
Cela s'applique en fait à toute "chose de clôture" analogue! ;)
De plus, en général, les éditeurs traitent mieux les accolades, dans le sens où ils peuvent vous indiquer où il était ouvert. Mais même cela ne rend pas les commentaires descriptifs moins valables.
d'accord, c'est beaucoup mieux - au lieu de taper endif - vous pouvez dire ce que fait réellement la condition if.
cartalot
@cartalot serait peut-être même bien d'avoir intégré le langage (comme argument optionnel de fermeture de bloc nommé), donc nous pourrions avoir des erreurs pour fermer les mauvais blocs aux mauvais endroits! :)
Ceci est particulièrement utile pour les instructions de contrôle longues où vous ne pourrez peut-être pas voir la déclaration du haut depuis l'accolade inférieure.
Je pense que cela dépend vraiment de votre style de codage personnel. Si vous êtes habitué à C ++, Javascript, etc., vous vous sentirez peut-être plus à l'aise avec la syntaxe {}. Si vous êtes habitué à Visual Basic, vous souhaiterez peut-être utiliser if: endif; syntaxe.
Je ne suis pas sûr que l'on puisse définitivement dire que l'un est plus facile à lire que l'autre - c'est une préférence personnelle. Je fais généralement quelque chose comme ça:
est une question d'opinion. Je peux voir pourquoi certains penseraient que la deuxième méthode est plus facile - mais seulement si vous n'avez pas programmé en Javascript et C ++ toute votre vie. :)
Non, les crochets sont objectivement plus faciles à lire (lorsque vous n'utilisez pas la version égyptienne). Même si vous faites les crochets de telle sorte qu'ils marchent comme un égyptien, c'est plus facile à lire que la syntaxe VB car les éditeurs de texte modernes auront une fonction de correspondance entre crochets pour vous emmener de l'ouverture à la fermeture du crochet ou vice versa. Il n'y a aucun moyen qu'ils puissent avoir une fonction de correspondance de syntaxe VB. Vous devez également tenir compte de l'imbrication, et VB échoue lamentablement sur ce point.
developerwjk
5
J'utiliserais la première option si possible, quelle que soit la nouvelle option. La syntaxe est standard et tout le monde la connaît. Il est également rétrocompatible.
Mais: si vous souhaitez utiliser PHP comme langage de modélisation dans vos fichiers de vue (le V de MVC), vous pouvez utiliser cette syntaxe alternative pour distinguer le code php écrit pour implémenter la logique métier (parties Controller et Model de MVC) et gui- logique. Bien sûr, ce n'est pas obligatoire et vous pouvez utiliser la syntaxe de votre choix.
Il n'y a pas de différence technique entre les deux syntaxes. La syntaxe alternative n'est pas nouvelle; il était supporté au moins aussi loin que PHP 4, et peut-être même plus tôt.
Vous pourriez préférer la forme alternative car elle indique explicitement la structure de contrôle qui se termine: endwhilepar exemple, ne peut terminer qu'un whilebloc, alors que si vous rencontrez une accolade, cela pourrait fermer n'importe quoi.
Vous préférerez peut-être la syntaxe traditionnelle, cependant, si vous utilisez un éditeur qui a un support spécial pour les accolades dans d'autres syntaxes de type C. Vim, par exemple, prend en charge plusieurs frappes pour naviguer vers les accolades correspondantes et vers les débuts et les fins de blocs délimités par des accolades. La syntaxe alternative briserait cette fonctionnalité de l'éditeur.
Un bon éditeur de texte aura un raccourci correspondant aux crochets pour vous emmener là où il a commencé. Il endif;sera difficile de trouver le début, car ils n'auront pas de fonction similaire pour cela, et le code de style VB ne s'emboîte pas bien.
developerwjk
3
Tout dépend, personnellement je préfère la syntaxe traditionnelle avec des échos et beaucoup d'indentations, car c'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 suis d'accord que la syntaxe alt est plus propre avec les différentes clauses de fin, 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:
J'avais l'habitude d'utiliser les accolades, mais maintenant, je préfère utiliser cette syntaxe alternative abrégée en raison de la lisibilité et de l'accessibilité du code.
si vous lisez tout le fil de discussion: une syntaxe alternative est préférée et beaucoup <em> plus propre </em> lors de la création de modèles ou de l'utilisation d'une langue étrangère dans les vues php
Juraj Blahunka
1
J'utilisais des accolades pour les conditions "if, else". Cependant, j'ai trouvé "if (xxx): endif;" est plus sémantique si le code est fortement enveloppé et plus facile à lire dans tous les éditeurs.
Bien sûr, les éditeurs de lots sont capables de reconnaître et de mettre en évidence des morceaux de code lorsque des accolades sont sélectionnées. Certains fonctionnent également bien sur la paire "if (xxx): endif" (par exemple, NetBeans)
Personnellement, je recommanderais "if (xxx): endif", mais pour un petit contrôle de condition (par exemple, une seule ligne de code), il n'y a pas beaucoup de différences.
Je pense qu'aucune des réponses préexistantes n'identifie pleinement la réponse ici, alors je vais articuler ma propre perspective. Fonctionnellement, les deux méthodes sont les mêmes. Si le programmeur est familier avec d'autres langages suivant la syntaxe C, alors il se sentira probablement plus à l'aise avec les accolades, ou bien si php est le premier langage qu'ils apprennent, ils se sentiront plus à l'aise avec la ifendifsyntaxe, car elle semble plus proche à la langue ordinaire.
Si vous êtes un programmeur vraiment sérieux et que vous avez besoin de faire les choses rapidement, je pense que la syntaxe entre accolades est supérieure car elle permet de gagner du temps lors de la saisie.
if(/*condition*/){/*body*/}
par rapport à
if(/*condition*/):/*body*/
endif;
Cela est particulièrement vrai avec d'autres boucles, par exemple, une foreachoù vous finiriez par taper 10 caractères supplémentaires. Avec les accolades, il vous suffit de taper deux caractères, mais pour la syntaxe basée sur les mots-clés, vous devez taper un mot-clé supplémentaire complet pour chaque boucle et instruction conditionnelle.
} } } }
(qui peut être fait avecendif
aussi) et que vous voulez savoir où elles étaient ouvertes? La réponse n'est ni l'un ni l'autre . C'est fondamentalement la première "règle" des principes de conception python .{}
c'est mieux et: endif;
c'est une atrocité qui n'existerait pas si la vie était juste. Avec un bon éditeur de texte, vous aurez un raccourci clavier pour faire correspondre les crochets, pour vous faire passer de l'ouverture à la fermeture ou vice versa. Rien de tel n'existe ni ne pourrait jamais exister pour la: endif;
syntaxe hideuse .Réponses:
Ce sont les mêmes mais le second est génial si vous avez MVC dans votre code et que vous ne voulez pas avoir beaucoup d'échos dans votre code. Par exemple, dans mes
.phtml
fichiers (Zend Framework), j'écrirai quelque chose comme ceci:la source
{}
. Aucun écho supplémentaire n'est nécessaire<?php if(...){ ?> ... <?php }else{ ?> ... <?php } ?>
. Quelle est la différence avec<?php if(...): ?> ... <?php else: ?> ... <?php endif ?>
?Personnellement, je déteste vraiment la syntaxe alternative. Une bonne chose à propos des accolades est que la plupart des IDE, vim, etc. ont tous une mise en évidence de parenthèses. Dans mon éditeur de texte, je peux double-cliquer sur une accolade et cela mettra en évidence le morceau entier afin que je puisse voir où il se termine et commence très facilement.
Je ne connais pas un seul éditeur qui puisse mettre en évidence endif, endforeach, etc.
la source
endif
en évidence correctement en tant que fin de bloc. Si ce n'est pas le cas, vous n'achetez vraiment rien en utilisant}
car il ne correspondra pas de toute façon.Je pense que cela dit tout:
http://ca3.php.net/manual/en/control-structures.alternative-syntax.php
Lorsque vous mélangez HTML et PHP, la syntaxe alternative est beaucoup plus facile à lire. Dans les documents PHP normaux, la syntaxe traditionnelle doit être utilisée.
la source
Dans notre entreprise, la manière préférée de gérer le HTML est:
En fin de compte, il s'agit vraiment d'en choisir un et de s'y tenir.
la source
<?php if(TRUE){?> test <?php }?> <?php else{ ?> test2 <?php }?>
Ils sont en effet tous les deux identiques, fonctionnellement.
Mais si le
endif
correspondant s'éloigne trop du correspondant,if
je pense qu'il est préférable de lui faire un commentaire de référence. Juste pour que vous puissiez facilement trouver où il était ouvert. Quelle que soit la langue utilisée:Cela s'applique en fait à toute "chose de clôture" analogue! ;)
De plus, en général, les éditeurs traitent mieux les accolades, dans le sens où ils peuvent vous indiquer où il était ouvert. Mais même cela ne rend pas les commentaires descriptifs moins valables.
la source
Voici où vous pouvez le trouver dans la documentation officielle: PHP: Syntaxe alternative pour les structures de contrôle
la source
Je pense que c'est particulièrement clair lorsque vous utilisez un mélange de
if
s,for
s etforeach
es dans les scripts de vue:par opposition à:
Ceci est particulièrement utile pour les instructions de contrôle longues où vous ne pourrez peut-être pas voir la déclaration du haut depuis l'accolade inférieure.
la source
Je pense que cela dépend vraiment de votre style de codage personnel. Si vous êtes habitué à C ++, Javascript, etc., vous vous sentirez peut-être plus à l'aise avec la syntaxe {}. Si vous êtes habitué à Visual Basic, vous souhaiterez peut-être utiliser if: endif; syntaxe.
Je ne suis pas sûr que l'on puisse définitivement dire que l'un est plus facile à lire que l'autre - c'est une préférence personnelle. Je fais généralement quelque chose comme ça:
Que ce soit plus facile à lire que:
est une question d'opinion. Je peux voir pourquoi certains penseraient que la deuxième méthode est plus facile - mais seulement si vous n'avez pas programmé en Javascript et C ++ toute votre vie. :)
la source
J'utiliserais la première option si possible, quelle que soit la nouvelle option. La syntaxe est standard et tout le monde la connaît. Il est également rétrocompatible.
la source
Les deux sont identiques.
Mais: si vous souhaitez utiliser PHP comme langage de modélisation dans vos fichiers de vue (le V de MVC), vous pouvez utiliser cette syntaxe alternative pour distinguer le code php écrit pour implémenter la logique métier (parties Controller et Model de MVC) et gui- logique. Bien sûr, ce n'est pas obligatoire et vous pouvez utiliser la syntaxe de votre choix.
ZF utilise cette approche.
la source
Il n'y a pas de différence technique entre les deux syntaxes. La syntaxe alternative n'est pas nouvelle; il était supporté au moins aussi loin que PHP 4, et peut-être même plus tôt.
Vous pourriez préférer la forme alternative car elle indique explicitement la structure de contrôle qui se termine:
endwhile
par exemple, ne peut terminer qu'unwhile
bloc, alors que si vous rencontrez une accolade, cela pourrait fermer n'importe quoi.Vous préférerez peut-être la syntaxe traditionnelle, cependant, si vous utilisez un éditeur qui a un support spécial pour les accolades dans d'autres syntaxes de type C. Vim, par exemple, prend en charge plusieurs frappes pour naviguer vers les accolades correspondantes et vers les débuts et les fins de blocs délimités par des accolades. La syntaxe alternative briserait cette fonctionnalité de l'éditeur.
la source
En fin de compte, vous ne voulez tout simplement pas chercher la ligne suivante et ensuite deviner où elle a commencé:
Techniquement et fonctionnellement, ils sont identiques.
la source
endif;
sera difficile de trouver le début, car ils n'auront pas de fonction similaire pour cela, et le code de style VB ne s'emboîte pas bien.Tout dépend, personnellement je préfère la syntaxe traditionnelle avec des échos et beaucoup d'indentations, car c'est tellement plus facile à lire.
Je suis d'accord que la syntaxe alt est plus propre avec les différentes clauses de fin, 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:
la source
J'avais l'habitude d'utiliser les accolades, mais maintenant, je préfère utiliser cette syntaxe alternative abrégée en raison de la lisibilité et de l'accessibilité du code.
la source
Personnellement, je préfère le faire en deux sections séparées mais dans le même PHP comme:
Mais c'est peut-être plus lent?
la source
Je pense que c'est une question de préférence. J'utilise personnellement:
la source
J'utilisais des accolades pour les conditions "if, else". Cependant, j'ai trouvé "if (xxx): endif;" est plus sémantique si le code est fortement enveloppé et plus facile à lire dans tous les éditeurs.
Bien sûr, les éditeurs de lots sont capables de reconnaître et de mettre en évidence des morceaux de code lorsque des accolades sont sélectionnées. Certains fonctionnent également bien sur la paire "if (xxx): endif" (par exemple, NetBeans)
Personnellement, je recommanderais "if (xxx): endif", mais pour un petit contrôle de condition (par exemple, une seule ligne de code), il n'y a pas beaucoup de différences.
la source
Je pense qu'aucune des réponses préexistantes n'identifie pleinement la réponse ici, alors je vais articuler ma propre perspective. Fonctionnellement, les deux méthodes sont les mêmes. Si le programmeur est familier avec d'autres langages suivant la syntaxe C, alors il se sentira probablement plus à l'aise avec les accolades, ou bien si php est le premier langage qu'ils apprennent, ils se sentiront plus à l'aise avec la
if
endif
syntaxe, car elle semble plus proche à la langue ordinaire.Si vous êtes un programmeur vraiment sérieux et que vous avez besoin de faire les choses rapidement, je pense que la syntaxe entre accolades est supérieure car elle permet de gagner du temps lors de la saisie.
par rapport à
Cela est particulièrement vrai avec d'autres boucles, par exemple, une
foreach
où vous finiriez par taper 10 caractères supplémentaires. Avec les accolades, il vous suffit de taper deux caractères, mais pour la syntaxe basée sur les mots-clés, vous devez taper un mot-clé supplémentaire complet pour chaque boucle et instruction conditionnelle.la source