Pour répondre directement à votre question: ne faites jamais écho à un texte statique ou HTML. Laissez cela en dehors de votre PHP.
<?php echo "<p>Hello World</p>"; // Alway wrong. ?>
<p>Hello World</p> <!-- Does the same thing, faster, and is more readable. -->
S'échapper vers PHP est un gaspillage si tout ce que vous allez faire est de passer en texte statique ou en html statique. Tout le code à l'intérieur de <?php ?>
est envoyé à PHP pour être interprété. Cela signifie que votre site Web est plus lent et que vous gaspillez de l'électricité si vous passez de grandes quantités de texte statique à PHP sans raison. (Parfois, il y a une raison.)
La meilleure pratique consiste à faire fonctionner votre logique et votre grognement dans des fichiers sans HTML, uniquement PHP.
La façon dont j'aime le faire est avec un framework MVC. J'ai du PHP pur dans les modèles et les contrôleurs, et un mélange de HTML et PHP dans les vues. Vous n'avez pas besoin d'un framework MVC; vous pouvez simplement coller votre mélange de HTML dans des fichiers modèles, que vous incluez ensuite dans vos fichiers PHP purs.
Une fois que vous avez créé vos variables (qui ne contiennent pas de code HTML) dans des fichiers PHP purs, vous pouvez les transmettre au fichier avec votre code HTML. Là, et seulement là, est-ce bien de mélanger HTML et PHP. Mais, et ceci est important, mais lorsque vous travaillez avec des fichiers HTML, gardez le PHP au minimum.
Heureusement, PHP est livré avec des outils conviviaux pour rendre PHP plus facile à lire lorsqu'il est mélangé avec du HTML.
Syntaxe alternative
La meilleure pratique consiste à utiliser la syntaxe PHP régulière lors de l'écriture de PHP pur, mais la syntaxe alternative, lors du mélange de PHP et HTML.
Dans les fichiers PHP standard sans HTML:
if ($something) {
do_something(); // do_something() shouldn't echo or print.
}
C'est beau pour du PHP pur, mais pas idéal pour échapper au HTML. En particulier, les accolades de fermeture sont souvent difficiles à comprendre lorsqu'elles apparaissent dans de gros tas de HTML.
Il semble, sur la base de votre question, que vous auriez écrit, dans un fichier mélangeant HTML et PHP, ceci:
<?php
if ($something) {
echo '<p>Hello World.</p>';
}
?>
Pour les raisons décrites ci-dessus, nous souhaitons que le HTML ne soit pas envoyé à PHP. Nous faisons cela comme ceci:
<?php if ($something) { ?>
<p>Hello World.</p>
<?php } ?>
Nous avons retiré notre code HTML de nos balises PHP, ce qui est une amélioration. Mais on pourrait aller plus loin.
Remarquez à quel point l'accolade de fermeture n'est pas informative? Nous ne savons pas s'il ferme une boucle ou une instruction if. Cela semble trivial dans l'exemple ci-dessus, mais il y a souvent des dizaines de lignes de HTML à l'intérieur de if / endif à l'intérieur d'une boucle / endloop.
La meilleure pratique est que dans un fichier mélangeant PHP et HTML, vous utilisez la syntaxe alternative, qui omet les accolades ouvrantes et fermantes ( { }
):
<?php if ($something): ?>
<p>Hello world.</p>
<?php endif; ?>
Mis à part la sémantique de la nouvelle syntaxe ( :
et endif;
au lieu de {
et }
), vous devriez remarquer deux choses:
- Encore une fois, le HTML et le texte, bien que contrôlés par PHP, sont en dehors des
<?php ?>
balises, donc ils ne sont pas interprétés. Pour les raisons décrites ci-dessus, c'est bien.
- C'est beaucoup plus informatif que si tout cela était du php, y compris des accolades de fermeture aléatoires (
<?php } ?>
) fermant des choses difficiles à trouver où elles se sont ouvertes (car elles sont mélangées avec une bouffée de HTML à l'aspect désordonné). Encore une fois, imaginez un gros fichier HTML avec des boucles et des instructions if. Spécifier ce que vous fermez peut clarifier beaucoup.
La même syntaxe conviviale pour les modèles peut également être utilisée pour les boucles:
<?php foreach ($things as $thing): ?>
<li><?php echo $thing; ?></li>
<?php endforeach; ?>
Balises courtes
Un autre excellent outil fourni par PHP que, encore une fois, vous ne souhaitez utiliser lorsque vous mélangez PHP et HTML ensemble, est les balises courtes. Vous devrez peut-être activer les balises courtes dans le fichier php.ini. Une fois activées, les balises courtes rendent tout encore plus lisible.
Sans balises courtes, vous devez écrire <?php echo $something; ?>
mais avec des balises courtes, vous pouvez écrire <?=$something?>
et cela aura exactement le même résultat.
Lorsque vous combinez des balises courtes et la syntaxe PHP alternative, vous pouvez vraiment écrire des fichiers HTML élégants, qui incluent des éléments PHP. Prenant notre dernier exemple de boucle (juste la partie à l'intérieur de la boucle), les balises courtes nous permettent de réduire:
<li><?php echo $thing; ?></li>
à
<li><?=$thing?></li>
ce qui est beaucoup plus lisible.
Pouvons-nous aller plus loin? Oui. En utilisant divers systèmes de modèles, vous pouvez faire des choses comme:
<li>{thing}</li>
Ce qui est incroyablement lisible. Les systèmes de modèles, cependant, sont bien au-delà de la portée de la question initiale (que j'ai laissée il y a quelque temps de toute façon).