Чтобы прямо ответить на ваш вопрос: никогда не повторяйте статический текст или 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. В приведенном выше примере это кажется тривиальным, но внутри if / endif внутри цикла / endloop часто бывают десятки строк HTML.
Лучшая практика заключается в том, что в файлах, смешивающих 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>
Что удивительно читаемо. Системы шаблонов, однако, выходят за рамки первоначального вопроса (который я все равно оставил некоторое время назад).