web-dev-qa-db-fra.com

Quel est le meilleur: pour inclure du HTML à l'intérieur PHP code ou à l'extérieur?

Regarde ça:

<?php
echo "Hello World";
?>
<br />
<?php
echo "Welcome";
?>

Et maintenant regardez ça:

<?php
echo "Hello World";
echo "<br />";
echo "Welcome";
?>

Lequel des exemples ci-dessus est considéré comme le meilleur (au moins du point de vue des performances)?.

Je sais que les exemples sont triviaux mais je veux suivre les bonnes pratiques dès le début, donc quand j'ai de plus en plus de lignes, cela n'affectera pas la performance ou quoi que ce soit de manière négative.

28
rashed

Comme le souligne le commentaire, cela devrait être fait par des modèles. Mais si seulement vos deux choix sont possibles. Le cas 1 sera meilleur. Il s'agit du même concept que Android gonfler la mise en page par xml, ou faire par programmation l'interface utilisateur. Votre <br/> est un contenu statique de votre html et tout ce que votre serveur fera sera de le montrer. Mais si vous utilisez php, pour l'exécuter, cela utilisera les ressources de vos serveurs et sera informatique.

Voici comment procéder: index.php:

<?php
include 'header.html';
...
include 'footer.html';  
?>  

header.html et footer.html sont des modèles.

23
wtsang02

Pour répondre directement à votre question: Jamais faire écho à du 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. -->

Échapper à PHP est un gaspillage si tout ce que vous allez faire est de passer du texte statique ou du html statique. Tout le code à l'intérieur de <?php ?> est envoyé à PHP à interpréter. 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 pur PHP dans les modèles et contrôleurs, et un mélange de HTML et PHP dans les vues. Vous n'avez pas besoin d'un framework MVC; vous pourriez il suffit de coller votre mélange de HTML dans des fichiers modèles, que vous incluez ensuite dans vos purs fichiers PHP.

Une fois que vous avez créé vos variables (qui ne contiennent pas de HTML) dans des fichiers purs PHP), vous pouvez les transmettre au fichier avec votre HTML. Là, et seulement là, est-ce très bien pour 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 régulière PHP lors de l'écriture de PHP pur, mais la syntaxe alternative, lors du mélange PHP et HTML.

Dans les fichiers PHP 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 HTML de nos balises PHP, ce qui est une amélioration. Mais nous pourrions 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:

  1. Encore une fois, le HTML et le texte, bien que contrôlés par PHP, sont en dehors du <?php ?> tags, il n'est donc pas interprété. Pour les raisons décrites ci-dessus, c'est bien.
  2. C'est beaucoup plus informatif que si tout était php, y compris les accolades fermantes aléatoires (<?php } ?>) fermant les choses qui sont difficiles à trouver là où elles se sont ouvertes (parce qu'elles sont mélangées avec un tas de HTML au look 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 que lorsque vous mélangez PHP et HTML ensemble, ce sont les balises courtes. Vous devrez peut-être les désactiver balises activées 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 alternative PHP, vous pouvez vraiment écrire des fichiers HTML élégants, qui incluent PHP éléments. Prenons notre dernier exemple de boucle (juste le 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 en dehors de la portée de la question initiale (que j'ai laissée il y a quelque temps de toute façon).

55
Ted

Vous apprenez, oubliez les performances dans les pages PHP. Au lieu de cela, choisissez la manière la plus facile à lire.

En regardant vos deux exemples, le deuxième est certainement le plus facile à lire, bien que je pense que c'est à cause de l'espacement que vous avez utilisé. Vous dites que vous cherchez à développer de bonnes habitudes dès le départ, je pense que votre temps peut être mieux utilisé en faisant bien lire votre code. Cela peut signifier la réécriture d'une section plusieurs fois jusqu'à ce que vous en soyez satisfait.

Si vous êtes vraiment intéressé par les coulisses, je vais essayer d'expliquer ce qui se passe avec le contenu statique dans une page PHP. L'une des premières choses consiste à "analyser "la page entière en code exécutable (comme vous voyez entre <?php ?> Mots clés). Une partie de cela consiste à transformer tout texte statique en echo.

Donc ça:

<?php echo "Hello World"; ?>
<br />
<?php echo "Welcome"; ?>

est transformé en quelque chose comme:

echo "Hello World";
echo "<br />";
echo "Welcome";

Il y a un coût très faible associé à l'analyse, mais aucune différence dans l'exécution du code résultant. Si vous utilisez un accélérateur PHP, l'analyse n'est effectuée qu'une seule fois, puis mise en cache, vous ne verrez donc aucune différence de performances après le premier chargement de la page.

N'oubliez pas: facile à lire!

4
GavinH

Pour répondre simplement à votre question: compte tenu de votre exemple de code, il y aura peu ou pas de différence de performance. PHP est traité au niveau du serveur/hôte tandis que HTML est traité par l'agent utilisateur/la personne qui regarde votre page Web sur leur navigateur. Qui sera plus rapide? Difficile à déterminer.

Je suis d'accord avec les autres pour dire que chacun a ses forces et ses faiblesses et peut très bien fonctionner ensemble. PHP est programmable et peut faire des calculs et travailler avec des variables. Pour cette raison, toutes mes pages finissent par être PHP et faire appel à des extraits de code HTML - des modèles comme a été mentionné et insère des variables pour que mon HTML devienne dynamique.

Dans votre exemple, vous pouvez regrouper le code HTML en une seule instruction PHP comme ceci:

    <?php echo "Hello World<br>Welcome"; ?>

J'espère que cela clarifie un peu.

0
Michael Moriarty

L'une des meilleures fonctionnalités de PHP est qu'il est conçu pour être intégré dans HTML. Il est généralement utilisé pour créer des modèles. Il facilite la lecture et la maintenance de votre code, car il sépare le code PHP du code HTML.

Mais si vous imprimez uniquement une page statique comme "Bonjour tout le monde!" C'est une mauvaise idée.

0
4ldrich

il existe des limites à l'utilisation de HTML dans PHP.

La plupart du temps, vous aurez votre code HTML à l'extérieur. Vous créeriez une page comme vous le feriez si vous n'utilisiez pas PHP, puis ajoutez le PHP dans les zones du document où vous en avez besoin. Vous pouvez avoir plusieurs morceaux de PHP dans un document.

Travailler avec PHP Inside HTML a quelques exemples:

https://www.thoughtco.com/php-with-html-2693952

0
Purvi Barot