Aby bezpośrednio odpowiedzieć na twoje pytanie: Nigdy nie odbijaj statycznego tekstu ani HTML. Pozostaw to poza swoim PHP.
<?php echo "<p>Hello World</p>"; // Alway wrong. ?>
<p>Hello World</p> <!-- Does the same thing, faster, and is more readable. -->
Ucieczka do PHP jest marnotrawstwem, jeśli wszystko, co musisz zrobić, to przekazać statyczny tekst lub statyczny HTML. Cały kod <?php ?>
jest wysyłany do PHP w celu interpretacji. Oznacza to, że twoja strona działa wolniej i marnujesz energię elektryczną, jeśli bez żadnego powodu przekazujesz do PHP duże ilości statycznego tekstu. (Czasami jest powód.)
Najlepszą praktyką jest logika i chrząkanie w plikach bez HTML, tylko PHP.
Lubię to robić z frameworkiem MVC. Mam czysty PHP w modelach i kontrolerach oraz mieszankę HTML i PHP w widokach. Nie potrzebujesz frameworka MVC; możesz po prostu umieścić swoją mieszankę HTML w plikach szablonów, które następnie dołączasz do czystych plików PHP.
Kiedy już utworzysz zmienne (które nie zawierają HTML) w czystych plikach PHP, możesz przekazać je do pliku za pomocą HTML. Tam i tylko tam można mieszać HTML i PHP. Ale to jest ważne, ale podczas pracy z plikami zawierającymi HTML, ogranicz PHP do minimum.
Na szczęście PHP zawiera przyjazne narzędzia, dzięki którym PHP jest łatwiejszy do odczytania po zmieszaniu z HTML.
Alternatywna składnia
Najlepszą praktyką jest używanie zwykłej składni PHP przy pisaniu czystego PHP, ale alternatywnej przy mieszaniu PHP i HTML.
W zwykłych plikach PHP bez HTML:
if ($something) {
do_something(); // do_something() shouldn't echo or print.
}
Jest to piękne dla czystego PHP, ale nie jest idealne, gdy uciekasz od HTML. W szczególności nawiasy zamykające są często trudne do zrozumienia, gdy pojawiają się w dużych stosach HTML.
Wydaje się, na podstawie twojego pytania, które napisałeś, w pliku mieszającym HTML i PHP, to:
<?php
if ($something) {
echo '<p>Hello World.</p>';
}
?>
Z powodów opisanych powyżej chcemy, aby HTML nie był wysyłany do PHP. Robimy to tak:
<?php if ($something) { ?>
<p>Hello World.</p>
<?php } ?>
Wyciągnęliśmy HTML z naszych tagów PHP, co jest ulepszeniem. Ale możemy pójść dalej.
Zauważ, jak mało pouczający jest nawias zamykający? Nie wiemy, czy zamyka pętlę, czy instrukcję if. W powyższym przykładzie wydaje się to trywialne, ale w tekście if / endif wewnątrz pętli / endloopa często znajdują się dziesiątki linii HTML.
Najlepszą praktyką jest to, że w pliku mieszającym PHP i HTML używasz alternatywnej składni, która pomija otwieranie i zamykanie nawiasów klamrowych ( { }
):
<?php if ($something): ?>
<p>Hello world.</p>
<?php endif; ?>
Oprócz semantyki nowej składni ( :
i endif;
zamiast {
i }
) powinieneś zauważyć dwie rzeczy:
- Znów HTML i tekst, chociaż kontrolowane przez PHP, znajdują się poza
<?php ?>
tagami, więc nie są interpretowane. Z powodów opisanych powyżej jest to dobre.
- Jest to o wiele bardziej pouczające niż gdyby były to wszystkie php, w tym losowe zamykanie nawiasów klamrowych (
<?php } ?>
) zamykające rzeczy, które trudno znaleźć w miejscu, w którym się otworzyły (ponieważ są zmieszane z dużą ilością niechlujnie wyglądającego HTML). Ponownie wyobraź sobie duży plik HTML z pętlami i instrukcjami if. Określanie tego, co zamykasz, może wiele wyjaśnić.
Ta sama przyjazna dla szablonu składnia może być również używana w przypadku pętli:
<?php foreach ($things as $thing): ?>
<li><?php echo $thing; ?></li>
<?php endforeach; ?>
Krótkie tagi
Innym świetnym narzędziem dostarczanym przez PHP, którego znowu chcesz używać tylko do mieszania PHP i HTML razem, są krótkie tagi. Może być konieczne włączenie krótkich tagów w pliku php.ini. Po włączeniu krótkie tagi sprawiają, że wszystko jest jeszcze bardziej czytelne.
Bez krótkich znaczników musisz pisać, <?php echo $something; ?>
ale przy użyciu krótkich znaczników możesz pisać, <?=$something?>
a uzyskasz dokładnie taki sam wynik.
Łącząc krótkie znaczniki i alternatywną składnię PHP, możesz naprawdę pisać eleganckie pliki HTML, które zawierają elementy PHP. Biorąc nasz ostatni przykład pętli (tylko część wewnątrz pętli), krótkie znaczniki pozwalają nam zmniejszyć:
<li><?php echo $thing; ?></li>
do
<li><?=$thing?></li>
co jest znacznie bardziej czytelne.
Czy możemy pójść dalej? Tak. Korzystając z różnych systemów szablonów, możesz wykonywać następujące czynności:
<li>{thing}</li>
Co jest niezwykle czytelne. Systemy szablonów są jednak znacznie poza zakresem pierwotnego pytania (które zresztą zostawiłem jakiś czas temu).