Відмежування від HTML
Все, що за межами пари з відкриваючим та закриваючим тегами, ігнорується
обробником PHP. Таким чином можна обробляти PHP-файли зі змішаним вмістом, тобто
вбудовувати PHP-код в HTML-документи, наприклад, при створенні
шаблонів.
<p>Ця частина коду буде проігнорована PHP, але показуватиметься через браузер.</p>
<?php echo 'В той час, як ця частина коду буде оброблятись.'; ?>
<p>І цей код - також буде проігноровано PHP, але показуватиметься через браузер.</p>
Такий код обробляється як і очікується, оскільки коли інтерпретатор PHP
зустрічає закриваючий тег ?> він просто починає виводити все, що
знаходить, допоки не зустріне інший відкриваючий тег. Але є два виключення,
коли інтерпретатор не виводить вміст після закриваючого тега:
по-перше, якщо безпосередньо далі йде символ нового рядка - про це можна
прочитати на сторінці
поділ інструкцій;
і по-друге, якщо наступний код знаходиться всередині тіла умовного оператора
(в такому разі інтерпретатор визначає результат в умові, перед тим як
вирішити що потрібно виводити). Дивіться наступний приклад.
Приклад #1 Розмежування коду PHP та HTML з використанням умовних операторів
<?php if ($expression == true): ?>
Цей текст буде показано, якщо змінна $expression матиме значення true,
тобто вираз if ($expression == true) буде дійсним.
<?php else: ?>
В противному разі буде виводитись цей текст.
<?php endif; ?>
В даному прикладі PHP буде пропускати ті блоки, де умова виразу не виконується,
навіть не дивлячись на те, що ці блоки знаходяться за межами відкриваючого
та закриваючого PHP-тегів, PHP-інтерпретатор просто перестрибуватиме їх.
Для виводу великих блоків текста, вихід з PHP-режиму
є більш ефективним, ніж відправка всього текста через
echo чи print.
Існує чотири різних пари з відкриваючими та закриваючими тегами, які можна
використовувати в PHP. Дві із них, <?php ?> та
<script language="php"> </script>, завжди доступні.
Дві інші пари - це короткі теги та теги в стилі
ASP, які можна включати та відключати у
конфігураційному файлі php.ini. Отже, хоча деякі люди вважають зручними
короткі теги та теги в стилі ASP, вони є менш
портативними, та взагалі то не рекомендуються.
Зауваження:
Якщо ви вставляєте блоки PHP вередині XML чи XHTML, вам потрібно
використовувати теги <?php ?> щоб код залишався сумісним згідно зі
стандартом.
Приклад #2 Різні варіанти відкриваючих та закриваючих тегів PHP
1. <?php echo 'якщо ви хочете обробляти PHP-код всередині XHTML або XML
документів, використовуйте такі теги'; ?>
2. <script language="php">
echo 'деякі редактори (наприклад FrontPage) не обробляють інструкції
всередині таких тегів';
</script>
3. <? echo 'цей код знаходиться всередині коротких тегів PHP'; ?>
А код в таких тегах <?= 'тут якийсь текст' ?>
є скороченням для коду <? echo 'тут якийсь текст' ?>
4. <% echo 'Також, якщо хочете, можете використовувати теги в ASP-стилі'; %>
А код в таких тегах <%= $змінна; %>
є скороченням для коду <% echo $змінна; %>
Хоча теги, показані в пунктах 1 та 2, завжди є доступними, теги, показані
в пункті 1, є найбільш вживаними, та є рекомендованим, на відміну від тегів
в пункті 2.
Короткі теги (пункт 3) є доступними, тільки якщо вони підключені через
директиву short_open_tag
в конфігураційному файлі php.ini, або якщо PHP було сконфігуровано з
параметром --enable-short-tags
.
Теги в стилі ASP (пункт 4) доступні, тільки коли
вони підключені через директиву asp_tags
в конфігураційному файлі php.ini.
Зауваження:
Використання коротких тегів краще уникати при розробці застосунків
чи бібліотек, що призначаються для поширення, або при розміщенні скриптів
на PHP-серверах, які знаходяться не під вашим контролем, оскільки короткі
теги можуть не підтримуватись. Для портативності, переконайтесь, що ви
не використовуєте короткі теги.
Зауваження:
У версіях PHP 5.2 та рініших, парсер не дозволяв використовувати
тільки відкриваючі теги <?php без використання
закриваючих тегів. Це стало можливим починаючи з PHP 5.3, при наявності
одного чи кількох пробілів після відкриваючого тега.
Зауваження:
Починаючи з PHP 5.4, короткий тег <?= завжди
розпізнається та є дійсним, незалежно від того, чи включена директива
short_open_tag.