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 .

11voto

Jeremy Ruten Points 59989

Voici où vous pouvez le trouver dans la documentation officielle : PHP : Syntaxe alternative pour les structures de contrôle

11voto

Je pense que c'est particulièrement clair lorsque vous utilisez un mélange de if s, for et foreach es dans les scripts de vue :

<?php if ( $this->hasIterable ): ?>
    <h2>Iterable</h2>
    <ul>
    <?php foreach ( $this->iterable as $key => $val ):?>
        <?php for ( $i = 0; $i <= $val; $i++ ): ?>
        <li><?php echo $key ?></li>
        <?php endfor; ?>
    <?php endforeach; ?>
    </ul>
<?php elseif ( $this->hasScalar ): ?>
    <h2>Scalar</h2>
    <?php for ( $i = 0; $i <= $this->scalar; $i++ ): ?>
    <p>Foo = Bar</p>
    <?php endfor; ?>
<?php else: ?>
    <h2>Other</h2>
    <?php if ( $this->otherVal === true ): ?>
    <p>Spam</p>
    <?php else: ?>  
    <p>Eggs</p>  
    <?php endif; ?>
<?php endif; ?>

par opposition à :

<?php if ( $this->hasIterable ){ ?>
    <h2>Iterable</h2>
    <ul>
    <?php foreach ( $this->iterable as $key => $val ){?>
        <?php for ( $i = 0; $i <= $val; $i++ ){ ?>
        <li><?php echo $key ?></li>
        <?php } ?>
    <?php } ?>
    </ul>
<?php } elseif ( $this->hasScalar ){ ?>
    <h2>Scalar</h2>
    <?php for ( $i = 0; $i <= $this->scalar; $i++ ){ ?>
    <p>Foo = Bar</p>
    <?php } ?>
<?php } else { ?>
    <h2>Other</h2>
    <?php if ( $this->otherVal === true ){ ?>
    <p>Spam</p>
    <?php } else { ?>  
    <p>Eggs</p>  
    <?php } ?>
<?php } ?>

C'est particulièrement utile pour les longues déclarations de contrôle où il se peut que vous ne puissiez pas distinguer la déclaration supérieure de l'accolade inférieure.

7voto

livefree75 Points 78

Je pense que cela dépend vraiment de votre style de codage personnel. Si vous êtes habitué à C++, Javascript, etc., vous serez peut-être plus à l'aise avec la syntaxe {}. Si vous êtes habitué à Visual Basic, vous préférerez peut-être utiliser la syntaxe if : endif ;.

Je ne suis pas sûr que l'on puisse dire définitivement que l'un est plus facile à lire que l'autre - c'est une question de préférence personnelle. Je fais habituellement quelque chose comme ça :

<?php
if ($foo) { ?>
   <p>Foo!</p><?php
} else { ?>
   <p>Bar!</p><?php
}  // if-else ($foo) ?>

Si c'est plus facile à lire que :

<?php
if ($foo): ?>
   <p>Foo!</p><?php
else: ?>
   <p>Bar!</p><?php
endif; ?>

est une question d'opinion. Je peux comprendre pourquoi certains pensent que la deuxième méthode est plus facile - mais seulement si vous n'avez pas programmé en Javascript et C++ toute votre vie :)

5voto

Paulo Points 1545

J'utiliserais la première option dans la mesure du possible, indépendamment de la nouvelle option. La syntaxe est standard et tout le monde la connaît. Elle est également rétrocompatible.

5voto

Itay Moav -Malimovka Points 17977

Les deux sont identiques.

Mais : Si vous souhaitez utiliser PHP comme langage de templating 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 contrôleur et modèle de MVC) de la logique graphique. Bien sûr, ce n'est pas obligatoire et vous pouvez utiliser la syntaxe de votre choix.

ZF utilise cette approche.

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