Was ist besser: HTML in oder außerhalb von PHP-Code einbinden?

28

Schau dir das an:

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

Und jetzt sieh dir das an:

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

Welches der oben genannten Beispiele wird als besser angesehen (zumindest in Bezug auf die Leistung)?

Ich weiß, dass die Beispiele trivial sind, aber ich möchte von Anfang an die Gewohnheiten der guten Praxis befolgen. Wenn ich also mehr und mehr Zeilen habe, würden sie die Leistung oder was auch immer nicht negativ beeinflussen.

vorschnell
quelle
14
Dies scheint in PHP nicht besonders populär zu sein. Beachten Sie jedoch, dass in anderen Ökosystemen beide als schlecht eingestuft werden und die richtige Alternative darin besteht, eine Vorlage aller statischen Teile mit minimaler Logik zu erstellen, um dynamische Teile einzuschließen, und diese dann aus dem zu rendern Programmiersprache.
1
@delnan - Sie sollten erwägen, dies als Antwort in leicht erweiterter Form zu veröffentlichen. Das ist viel sauberer.
jmort253
@ jmort253 Habe darüber nachgedacht, aber ich habe sehr wenig PHP-Kenntnisse, so dass ich nicht für Best Practices in der PHP-Welt sprechen konnte.
Welches Problem versuchen Sie zu lösen?
Jim G.
In Bezug auf die Leistung spielt es keine Rolle. Das Netzwerk ist im Vergleich so viel langsamer. Die Übertragungskosten sind erheblich höher, so dass die Erzeugungskosten im Vergleich unbedeutend sind.
Martin York

Antworten:

23

Wie bereits erwähnt, sollte dies anhand von Vorlagen erfolgen. Aber wenn nur Ihre zwei Wahl möglich ist. Fall 1 wird besser sein. Dies ist das gleiche Konzept wie das Aufblasen des Layouts von Android durch XML oder das programmatische Erstellen der Benutzeroberfläche. Sie <br/>sind ein statischer Inhalt aus Ihrem HTML-Code und Ihr Server wird ihn nur anzeigen. Aber wenn Sie PHP verwenden, um es auszuführen, wird dies Ihre Serverressourcen beanspruchen und rechnen.

So sollte es gemacht werden: index.php:

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

header.html und footer.html sind Vorlagen.

wtsang02
quelle
1
Ich habe ein Buch für Kevin Yank gelesen, das "PHP & MySQL Novice to Ninja" heißt und sich mit Controllern und Vorlagen befasst. Sind das die gleichen Dinge, von denen du mir erzählt hast, oder sind sie anders? Wenn sie gleich sind, wie verbessert sich die Leistung, wenn der Code in verschiedenen Dateien gespeichert wird?
24.
Vorlagen machen Ihre Website oder Anwendung flexibler. Sehen Sie, wie Kopf- und Fußzeilen oder sogar Posts von StackOverflow identisch sind? Sie verwenden dieselbe Vorlage und füllen sie mit dynamischen Daten.
wtsang02
Was ist der Hauptgrund dafür? Was ist, wenn wir es nicht so machen? was werden wir verlieren
24.
Schauen wir uns das an. Dies ist der 4. Kommentar dieses Antwortbeitrags. Wenn Sie diese Seite jetzt als Quelle anzeigen, wird "<div> <span ...> ... </ span> <a ...> ... </a>" angezeigt, das den 4000. Kommentar codiert. Ist das möglich? oder machen Sie dies einfach als Vorlage und lassen Sie Ihren Server dies hinzufügen, wenn es benötigt wird.
wtsang02
1
Auch @wtsang, Sie haben nie nur diese beiden Möglichkeiten, Sie haben immer eine dritte, laufen (oder lernen.)
ocodo
54

So beantworten Sie Ihre Frage direkt: Geben Sie niemals statischen Text oder HTML wieder. Lassen Sie das außerhalb Ihres PHP.

<?php echo "<p>Hello World</p>"; // Alway wrong. ?>

<p>Hello World</p>  <!-- Does the same thing, faster, and is more readable. -->

Es ist eine Verschwendung, zu PHP zu flüchten, wenn Sie nur statischen Text oder statisches HTML übergeben. Der gesamte Code innerhalb von <?php ?>wird zur Interpretation an PHP gesendet. Dies bedeutet, dass Ihre Website langsamer ist und Sie Strom verschwenden, wenn Sie große Mengen statischen Texts ohne Grund an PHP übergeben. (Manchmal gibt es einen Grund.)

Die beste Vorgehensweise ist, dass Ihre Logik und Ihr Grunzen in Dateien ohne HTML, nur mit PHP, funktionieren.

Ich mache das gerne mit einem MVC-Framework. Ich habe reines PHP in den Modellen und Controllern und eine Mischung aus HTML und PHP in den Ansichten. Sie benötigen kein MVC-Framework. Sie könnten einfach Ihre HTML-Mischung in Vorlagendateien einfügen, die Sie dann in Ihre reinen PHP-Dateien einfügen.

Sobald Sie Ihre Variablen (die kein HTML enthalten) in reinen PHP-Dateien erstellt haben, können Sie sie mit Ihrem HTML an die Datei weitergeben. Dort und nur dort ist es in Ordnung, HTML und PHP zu mischen. Aber, und das ist wichtig, aber wenn Sie mit HTML-Dateien arbeiten, sollten Sie PHP auf ein Minimum beschränken.

Zum Glück enthält PHP benutzerfreundliche Tools, die das Lesen von PHP in Kombination mit HTML erleichtern.

Alternative Syntax

Die beste Methode ist, beim Schreiben von reinem PHP die reguläre PHP-Syntax zu verwenden, beim Mischen von PHP und HTML die alternative Syntax.

In normalen PHP-Dateien ohne HTML:

if ($something) {
  do_something(); // do_something() shouldn't echo or print.
}

Dies ist schön für reines PHP, aber nicht ideal, wenn Sie HTML verlassen. Insbesondere die schließenden Klammern sind oft schwer zu verstehen, wenn sie in großen Mengen HTML angezeigt werden.

Es scheint, basierend auf Ihrer Frage, dass Sie in einer Datei geschrieben hätten, die HTML und PHP vermischt:

<?php
  if ($something) {
    echo '<p>Hello World.</p>';
  }
?>

Aus den oben beschriebenen Gründen möchten wir, dass der HTML-Code nicht an PHP gesendet wird. Wir machen das so:

<?php if ($something) { ?>
  <p>Hello World.</p>
<?php } ?>

Wir haben unseren HTML-Code aus unseren PHP-Tags erhalten, was eine Verbesserung darstellt. Aber wir könnten noch weiter gehen.

Beachten Sie, wie uninformativ die schließende Klammer ist? Wir wissen nicht, ob es eine Schleife oder eine if-Anweisung schließt. Dies scheint im obigen Beispiel trivial zu sein, aber es gibt oft Dutzende von HTML-Zeilen innerhalb von if / endif innerhalb einer Schleife / eines Endloops.

Die beste Vorgehensweise ist, dass Sie in einer Datei, die PHP und HTML mischt, die alternative Syntax verwenden, bei der das Öffnen und Schließen von geschweiften Klammern weggelassen wird ( { }):

<?php if ($something): ?>
  <p>Hello world.</p>
<?php endif; ?>

Abgesehen von der Semantik der neuen Syntax ( :und endif;anstelle von {und }) sollten Sie zwei Dinge beachten:

  1. Auch hier befinden sich HTML und Text, obwohl sie von PHP gesteuert werden, außerhalb der <?php ?>Tags, sodass sie nicht interpretiert werden. Aus den oben beschriebenen Gründen ist dies gut.
  2. Dies ist viel informativer, als wenn dies alles PHP wäre, einschließlich zufälliger schließender Klammern ( <?php } ?>), die Dinge schließen, die schwer zu finden sind, wo sie geöffnet wurden (weil sie mit einem Buch von chaotisch aussehendem HTML gemischt sind). Stellen Sie sich erneut eine große HTML-Datei mit Schleifen und if-Anweisungen vor. Das Angeben, was Sie schließen, kann viel verdeutlichen.

Dieselbe vorlagenfreundliche Syntax kann auch für Schleifen verwendet werden:

<?php foreach ($things as $thing): ?>
  <li><?php echo $thing; ?></li>
<?php endforeach; ?>

Kurze Tags

Ein weiteres großartiges Tool von PHP, das Sie ebenfalls nur zum Mischen von PHP und HTML verwenden möchten, sind kurze Tags. Möglicherweise müssen Sie kurze Tags in der Datei php.ini aktivieren. Einmal aktiviert, machen kurze Tags alles noch lesbarer.

Ohne kurze Tags müssen Sie schreiben, <?php echo $something; ?>aber mit kurzen Tags können Sie schreiben <?=$something?>und es wird genau das gleiche Ergebnis haben.

Wenn Sie kurze Tags und die alternative PHP-Syntax kombinieren, können Sie wirklich einige elegante HTML-Dateien schreiben, die PHP-Elemente enthalten. In unserem letzten Schleifenbeispiel (nur der Teil innerhalb der Schleife) können wir mit kurzen Tags Folgendes reduzieren:

<li><?php echo $thing; ?></li>

zu

<li><?=$thing?></li>

das ist viel besser lesbar.

Könnten wir noch weiter gehen? Ja. Mit verschiedenen Template-Systemen können Sie folgende Aufgaben ausführen:

<li>{thing}</li>

Welches ist erstaunlich lesbar. Templating-Systeme liegen jedoch weit außerhalb des Rahmens der ursprünglichen Frage (die ich ohnehin vor einiger Zeit gestellt habe).

Ted
quelle
4
+1 Für einen guten Rat für alle. Alternative Steuerungssyntax und kurze Tags sind immens wichtig, um mit Vorlagen zu beginnen und die Logik von der Präsentation zu trennen.
Will Meldon
1
Kurze Tags sollten mit Vorsicht verwendet werden. Wenn Sie Code erstellen, der wiederverwendet wird, können Sie nicht garantieren, dass die short_open_tagDirektive immer aktiviert ist. PHP 5.4 macht das immer <?=$thing?>verfügbar, auch wenn short_open_tages deaktiviert ist. Außerdem short_open_tagist standardmäßig deaktiviert, um Konflikte mit XML zu vermeiden.
Chris
3
+1 für die Anzeige der verschiedenen Alternativen, um zur besten Antwort zu gelangen.
Tola Odejayi
1
Vielleicht stimmte das früher, aber ich habe nur die Opcodes (dh was von der Engine ausgeführt wird) in PHP7 überprüft, und das Mischen von PHP / HTML spart mit Sicherheit nicht "Strom", indem statischen Text nicht weitergegeben wird. <?php $foo='ABC'; echo '<div>', $foo, '</div>'und <?php $foo='ABC'; ?><div><?=$foo?></div>führen zu exakt den gleichen Opcodes, dh sie sind identisch.
Josh aus Qaribou
In Bezug auf das Schablonieren von Systemen ist der einfachste Schablonierungsansatz, der Ihr Beispiel zulässt, ein einfacher Heredoc. Mit Heredoc können Sie sagen, <li>{$thing}</li>wie Sie es gezeigt haben, mit dem Vorteil gegenüber doppelten Anführungszeichen, dass Sie den doppelten Anführungszeichen darin nicht entkommen müssen. Sie können heredoc auch zuweisen oder an Funktionen übergeben, so ist es viel sauberer, dass PHP / HTML, wenn Sie es in Blöcken verwenden, z. array_reduce($items, function($s, $item) { $name = htmlspecialchars($item['name']); return $s . <<< EOT <li>{$name}: {$item['price']}</li> EOT; })
Josh aus Qaribou
4

Sie lernen, vergessen Sie die Leistung in PHP-Seiten. Wählen Sie stattdessen die Art und Weise, die am einfachsten zu lesen ist .

Wenn Sie sich Ihre beiden Beispiele ansehen, ist das zweite definitiv am einfachsten zu lesen, obwohl ich denke, dass dies an dem Abstand liegt, den Sie verwendet haben. Sie sagen, Sie möchten von Anfang an gute Gewohnheiten entwickeln. Ich denke, Sie können Ihre Zeit besser damit verbringen, dass Sie Ihren Code gut lesen. Dies kann bedeuten, dass Sie einen Abschnitt mehrmals umschreiben, bis Sie damit zufrieden sind.

Wenn Sie wirklich hinter die Kulissen schauen möchten, erkläre ich Ihnen, was mit statischen Inhalten auf einer PHP-Seite passiert. Eines der ersten Dinge ist das "Parsen" der gesamten Seite in ausführbaren Code (wie Sie zwischen <?php ?>Tags sehen). Ein Teil davon ist, statischen Text in einen zu verwandeln echo.

Also das:

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

verwandelt sich in etwas wie:

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

Das Parsen ist mit sehr geringen Kosten verbunden, es gibt jedoch keinen Unterschied bei der Ausführung des resultierenden Codes. Wenn Sie einen PHP-Beschleuniger verwenden, wird das Parsen nur einmal durchgeführt und dann zwischengespeichert, sodass Sie nach dem Laden der ersten Seite keinen Leistungsunterschied feststellen können.

Denken Sie daran: leicht zu lesen!

GavinH
quelle
1
Ich stimme dir nicht zu. Es geht nicht nur um die Leistung, es geht eigentlich um das Lernen. Es ist kein guter Rat, eine falsche Praxis zu lernen.
Isaac
Es ist nicht wahr, dass aus "statischem Text" ein "statischer Text" wird echo, wenn Sie das wörtlich meinen (was Ihre Sprache impliziert). Das Ergebnis ist das gleiche, aber die Methoden sind sehr unterschiedlich. Was Sie als "statischen Text" bezeichnen, verschwindet tatsächlich von PHP nach HTML. In diesem Fall sendet der Server Rohtext. Es wird nicht wie bei PHP analysiert echo. Die Auswirkungen auf die Leistung sind unter nicht erfundenen Umständen wahrscheinlich gering, aber der mechanistische Unterschied ist wichtig.
Underscore_d
0

Eine der besten Eigenschaften von PHP war, dass es in HTML eingebettet werden kann. Es wird normalerweise beim Erstellen von Vorlagen verwendet. Es erleichtert das Lesen und Verwalten Ihres Codes, da es den PHP-Code von HTML trennt.

Aber wenn Sie nur eine statische Seite wie "Hello World!" Es ist eine schlechte Idee.

4ldrich
quelle
0

Um Ihre Frage einfach zu beantworten: In Anbetracht Ihres Beispielcodes wird es kaum einen Unterschied in der Leistung geben. PHP wird auf Server- / Host-Ebene verarbeitet, während HTML vom Benutzeragenten / der Person verarbeitet wird, die Ihre Webseite in ihrem Browser betrachtet. Wer wird schneller sein? Schwer zu bestimmen.

Ich stimme anderen zu und sage, dass jeder seine Stärken und Schwächen hat und wirklich gut zusammenarbeiten kann. PHP ist programmierbar und kann Berechnungen durchführen und mit Variablen arbeiten. Aus diesem Grund sind alle meine Seiten PHP und rufen, wie erwähnt, Ausschnitte von HTML-Code-Vorlagen auf und fügen Variablen ein, damit mein HTML dynamisch wird.

In Ihrem Beispiel könnten Sie den HTML-Code wie folgt zu einer PHP-Anweisung zusammenfügen:

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

Hoffe das hilft ein wenig zu klären.

Michael Moriarty
quelle
0

Es gibt Einschränkungen bei der Verwendung von HTML in PHP.

Die meiste Zeit würden Sie Ihr HTML draußen haben. Sie würden eine Seite so erstellen, als ob Sie nicht PHP verwenden würden, und dann das PHP in die Bereiche des Dokuments einfügen, in denen Sie es benötigen. Sie können mehrere Teile von PHP in einem Dokument haben.

Arbeiten mit PHP Inside HTML enthält einige Beispiele:

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

Purvi Barot
quelle
-1

Es wird allgemein als schlechte Form angesehen, HTML-Code von PHP auszugeben. Dafür gibt es mehrere Gründe, aber der Hauptgrund ist, dass es insbesondere auf lange Sicht einfacher ist, Code zu verwalten, wenn HTML- und PHP-Code getrennt sind.

Es ist wie HTML, CSS und Javascript. Es ist viel einfacher und praktischer, es getrennt zu halten.

Technisch macht es jedoch absolut keinen Unterschied, wie Sie Sachen ausgeben. Für PHP sind es nur Bytes in einer Reihe.

Sverri M. Olsen
quelle
6
Es macht einen Unterschied. <?php echo 'hello'; ?>wird an PHP übergeben. hellowird nicht an PHP übergeben. Alles, was an PHP übergeben wird, wird in Bytecode konvertiert und dann interpretiert. Dies kostet Zeit, Rechenleistung und Strom.
Ted