Y a-t-il des différences entre...
if ($value) {
}
...et...
if ($value):
endif;
?
Y a-t-il des différences entre...
if ($value) {
}
...et...
if ($value):
endif;
?
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.
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>
<?php else: ?>
<a href="<?php echo $this->getModeUrl($_code) ?>" title="<?php echo $_label ?>" class="<?php echo strtolower($_code); ?>"><?php echo $_label ?></a>
<?php endif; ?>
<?php endforeach; ?>
<?php endif; ?>
</p>
<?php endif; ?>
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 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.
0 votes
La seconde méthode existe depuis PHP4, si ce n'est plus tôt.
0 votes
Voir aussi : stackoverflow.com/questions/381259/
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 avecendif
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 .7 votes
Évidemment
{}
est meilleur et: endif;
est une atrocité qui n'existerait pas si la vie était juste. Avec un bon éditeur de texte, vous disposez d'un raccourci clavier pour faire correspondre les parenthèses, afin de passer de l'ouverture à la fermeture ou vice versa. Une telle chose n'existe pas et ne pourra jamais exister pour l'affreux: endif;
la syntaxe.3 votes
@developerwjk comment cela peut-il ne jamais exister ?
0 votes
@developerwjk, c'est utile...
<?php if(TRUE): ?> test <?php else: ?> test2 <?php endif; ?>
0 votes
@Yousha Aleayoub, Tant que c'est limité à une seule ligne, ce n'est pas si mal je suppose.
0 votes
@YoushaAleayoub "utile" semble impliquer que vous ne pouvez pas faire cela avec des parenthèses, mais vous pouvez certainement le faire, et j'irais même jusqu'à dire que cela a l'air plus propre, personnellement.
<?php if(TRUE) { ?> test <?php } else { ?> test2 <?php } ?>