Щоб безпосередньо відповісти на ваше запитання: Ніколи не повторюйте статичний текст чи HTML. Залиште це поза вашого PHP.
<?php echo "<p>Hello World</p>"; // Alway wrong. ?>
<p>Hello World</p> <!-- Does the same thing, faster, and is more readable. -->
Увійти до PHP - це марно, якщо все, що ви збираєтеся зробити, - це передати статичний текст або статичний html. Весь код всередині <?php ?>
відправляється на PHP для інтерпретації. Це означає, що ваш веб-сайт повільніше, і ви витрачаєте електроенергію, якщо без жодної причини ви передаєте PHP велику кількість статичного тексту. (Іноді є причина.)
Найкраща практика полягає в тому, щоб ваша логіка та бурхливість працювали у файлах без будь-якого HTML, лише PHP.
Мені подобається це робити з рамкою MVC. У мене є чистий PHP в моделях і контролерах, а також суміш HTML і PHP у видах. Вам не потрібна рамка MVC; ви можете просто вставити суміш HTML у файли шаблонів, які ви потім включите до своїх чистих PHP-файлів.
Після того, як ваші змінні (які не включають HTML в них) створені в чистих PHP-файлах, ви можете передати їх у файл разом із вашим HTML. Там, і тільки там, добре поєднувати HTML і PHP. Але, і це важливо, але, працюючи з файлами, які мають HTML, зведіть PHP до мінімуму.
На щастя, PHP поставляється з дружніми інструментами для полегшення читання PHP при змішуванні з html.
Альтернативний синтаксис
Найкраща практика - використовувати звичайний синтаксис PHP при написанні чистого PHP, але альтернативний синтаксис при змішуванні PHP та HTML.
У звичайних PHP-файлах без HTML:
if ($something) {
do_something(); // do_something() shouldn't echo or print.
}
Це прекрасно для чистого PHP, але не ідеально під час виходу з HTML. Зокрема, часто закриття дужок часто важко зрозуміти, коли вони з'являються у великих групах HTML.
Виходячи з вашого запитання, ви б написали у файлі, що змішує HTML та PHP, це:
<?php
if ($something) {
echo '<p>Hello World.</p>';
}
?>
З вищеописаних причин ми хочемо, щоб HTML не надсилався до PHP. Ми робимо це так:
<?php if ($something) { ?>
<p>Hello World.</p>
<?php } ?>
Ми отримали наш HTML з тегів PHP, що є вдосконаленням. Але ми могли б піти далі.
Зауважте, наскільки неінформативний фіксатор? Ми не знаємо, чи це закриття циклу, чи оператор if. Це здається тривіальним у наведеному вище прикладі, але часто є десятки рядків HTML всередині if / endif всередині циклу / endloop.
Найкраща практика полягає в тому, що у файлі, що змішує PHP та HTML, ви використовуєте альтернативний синтаксис, який ухиляє дужки відкриття та закриття ( { }
):
<?php if ($something): ?>
<p>Hello world.</p>
<?php endif; ?>
Окрім семантики нового синтаксису ( :
а endif;
замість {
і }
), слід помітити дві речі:
- Знову ж таки, HTML і текст, хоча вони контролюються PHP, знаходяться поза
<?php ?>
тегами, тому вони не інтерпретуються. З вищеописаних причин це добре.
- Це набагато інформативніше, ніж якби це були всі php, включаючи випадкові дужки закриття (
<?php } ?>
) закриття речей, які важко знайти, де вони відкрилися (тому що вони змішані з набором безладного вигляду HTML). Знову ж, уявіть великий HTML-файл із циклами та if операторами. Визначення того, що ви закриваєте, може багато прояснити.
Один і той же синтаксис, сприятливий для шаблонів, може бути використаний і для циклів:
<?php foreach ($things as $thing): ?>
<li><?php echo $thing; ?></li>
<?php endforeach; ?>
Короткі теги
Ще один чудовий інструмент, що надається PHP, який, знову ж таки, ви хочете використовувати лише при змішуванні PHP та HTML разом, - це короткі теги. Можливо, вам доведеться ввімкнути короткі теги у файлі php.ini. Після ввімкнення короткі теги роблять все ще читабельнішим.
Без коротких тегів вам потрібно писати, <?php echo $something; ?>
але з короткими тегами ви можете писати, <?=$something?>
і це матиме такий самий результат.
Поєднуючи короткі теги та альтернативний синтаксис PHP, ви дійсно можете написати елегантні HTML-файли, до яких входять елементи PHP. Беручи наш останній приклад циклу (лише частина всередині циклу), короткі теги дозволяють нам зменшити:
<li><?php echo $thing; ?></li>
до
<li><?=$thing?></li>
що набагато читабельніше.
Чи можемо ми піти далі? Так. Використовуючи різні системи шаблонів, ви можете робити такі речі:
<li>{thing}</li>
Що дивно читабельно. Системи шаблонів, однак, виходять за рамки оригінального питання (який я поки що покинув).