PHP-интерпретатор игнорирует всё, что разместили вне пары открывающего и закрывающего тегов,
что разрешает добавлять в файлы смешанное содержимое. Это разрешает встраивать PHP-код
в HTML-документы, чтобы, например, создавать шаблоны.
Пример #1 PHP-код, который встроили в HTML-разметку
<p>PHP-интерпретатор проигнорирует разбор PHP-кода в этом параграфе, а текст отобразится в браузере.</p> <?php echo 'А эту строку файла — разберёт.'; ?> <p>Этот параграф PHP тоже не станет анализировать как PHP-код и отправит в браузер.</p>
Это работает предсказуемо, поскольку когда PHP-интерпретатор встречает закрывающие теги ?>,
он просто начинает выводить всё, что находит, — за исключением перевода строки, который
идёт сразу за закрывающим тегом, как описывает раздел
«Разделение инструкций», —
пока не встретит другой открывающий тег, если только закрывающий тег не встретился
в середине условной инструкции, тогда интерпретатор определяет результат
условия, прежде чем решить, что пропустить.
Следующий пример показывает это поведение.
Структуры с условиями.
Пример #2 Продвинутый выход из режима HTML-разметки с условиями
<?php if ($expression == true): ?> Это отобразится, если выражение истинно. <?php else: ?> Иначе отобразится это. <?php endif; ?>
В этом примере PHP пропустит блок, для которого условие не выполняется,
даже если блок указали за пределами открывающего и закрывающего тегов;
PHP пропустит блоки по условию, поскольку PHP-интерпретатор пропустит блоки
внутри условия, которое не выполняется.
Для вывода больших блоков текста выход из режима разбора PHP-кода
часто эффективнее отправки текста конструкциями
echo или print.
Замечание:
В XML- или XHTML-документы PHP-код встраивают внутри тегов <?php ?>,
чтобы документы соответствовали стандартам.
When the documentation says that the PHP parser ignores everything outside the <?php ... ?> tags, it means literally EVERYTHING. Including things you normally wouldn't consider "valid", such as the following:
<html><body> <p<?php if ($highlight): ?> class="highlight"<?php endif;?>>This is a paragraph.</p> </body></html>
Notice how the PHP code is embedded in the middle of an HTML opening tag. The PHP parser doesn't care that it's in the middle of an opening tag, and doesn't require that it be closed. It also doesn't care that after the closing ?> tag is the end of the HTML opening tag. So, if $highlight is true, then the output will be:
<html><body> <p class="highlight">This is a paragraph.</p> </body></html>
Otherwise, it will be:
<html><body> <p>This is a paragraph.</p> </body></html>
Using this method, you can have HTML tags with optional attributes, depending on some PHP condition. Extremely flexible and useful!
One aspect of PHP that you need to be careful of, is that ?> will drop you out of PHP code and into HTML even if it appears inside a // comment. (This does not apply to /* */ comments.) This can lead to unexpected results. For example, take this line: