ZaLinux.ru

Почему не работает код в <? и ?>. Как включить поддержку сокращённых тегов в PHP. Что означает <?=

Правильные теги для PHP файлов

Даже если PHP код помещён в файл с расширением .php, то для того, чтобы он обрабатывался интерпретатором именно как PHP код, он должен быть размещён после тэга

<?php

Закрывающий тег, который, кстати, пишется так

?>

Закрывающий тег не является обязательным. Тем не менее, закрывающий тег может использоваться когда заканчивается PHP код и начинается, например, HTML код.

Пары <?php и ?> могут использоваться в одном файле несколько раз, отделяя PHP код от HTML кода.

Важная вещь, которую нужно знать про закрывающий тег ?>: он выбросит вас из PHP в HTML даже если он закомментирован с помощью //. Однако комментарий /* */ справляется — тег ?> теряет своё специальное значение. Помните об этой интересной особенности, поскольку при комментировании блоков кода, вы можете столкнуться с необычной ситуацией, когда ?> продолжит работу не смотря на то, что вы этого не ожидаете.

В некоторых старых скриптах или старых учебниках вы можете встретить примеры PHP кода, помещённого между тегов <? и ?>.

Если вы поместите какой-то PHP код между этих тегов, то почти наверняка веб-браузер просто ничего не отобразит с новой версией PHP.

Почему не работает код в <? и ?>

В современных версиях PHP поддержка коротких тегов по умолчанию отключена. Причина в появлении формата XML, взгляните на следующую строку: <?xml version="1.0"?>

Эта строка содержит теги PHP, хотя на самом деле это элемент XML разметки. Чтобы избежать такой двусмысленности, сокращённые теги отключены, но их поддержку можно снова включить!

Как включить поддержку сокращённых тегов в PHP

В файле php.ini имеется директива:

short_open_tag = Off

она определяет, разрешается ли короткая форма записи (<? ?>) тегов PHP. Если вы хотите использовать PHP совместно с XML, вы можете отключить эту опцию, чтобы беспрепятственно использовать <?xml ?>. В противном случае, вы можете отобразить это при помощи PHP, например: <?php echo '<?xml version="1.0"?>'; ?>. Если же эта опция отключена, вы должны использовать длинную форму открывающего тега PHP (<?php ?>).

Больше не работают <% и %> и <script language="php">

В PHP 7 удалена поддержка тегов ASP <% и %>, а также <script language="php">.

Что означает <?= в PHP

Конструкция <?= означает буквально

<? echo

Пример её использования, не вызывающий синтаксическую ошибку:

<?= 'Testing...';

Отделение PHP и HTML кода

Все, что находится вне пары открывающегося и закрывающегося тегов, игнорируется интерпретатором PHP, у которого есть возможность обрабатывать файлы со смешанным содержимым. Это позволяет PHP-коду быть встроенным в документы HTML, к примеру, для создания шаблонов.

<p>Это будет проигнорировано PHP и отображено браузером.</p>
<?php echo 'А это будет обработано.'; ?>
<p>Это тоже будет проигнорировано PHP и отображено браузером.</p>

Это работает так, как и ожидается, потому что когда интерпретатор PHP встречает закрывающие теги ?>, он просто начинает выводить все что найдёт (за исключением сразу следующего символа перевода строки) пока не встретит другой открывающий тег за исключением случая с содержащимся внутри кода условным оператором, в котором интерпретатор определяет результат условия перед принятием решения что пропустить. Ознакомьтесь со следующим примером.

Продвинутое изолирование с использованием условий:

<?php if ($expression == true): ?>
  Это будет отображено, если выражение истинно.
<?php else: ?>
  В ином случае будет отображено это.
<?php endif; ?>

В этом примере PHP пропускает блоки, где условие не соблюдается. Даже несмотря на то, что они находятся вне пары открывающих/закрывающих тегов, PHP пропустит их в соответствии с условием, так как интерпретатор PHP будет перепрыгивать через блоки, содержащиеся внутри условия, которое не соблюдается.

При выводе больших блоков текста выход из режима синтаксического разбора PHP обычно более эффективен, чем отправка текста с помощью функций echo или print.

Выход из HTML также применяется к другим управляющим операторам:

<?php for ($i = 0; $i < 5; ++$i): ?>
Hello, there!
<?php endfor; ?>

При выполнении приведённого выше фрагмента кода, мы получаем следующий вывод:

Hello, there!
Hello, there!
Hello, there!
Hello, there!

Разделение инструкций

Как в C или Perl, PHP требует окончания инструкций точкой запятой в конце каждой инструкции. Закрывающий тег блока PHP-кода автоматически применяет точку с запятой; т.е. нет необходимости ставить точку с запятой в конце последней строки блока с PHP-кодом. Закрывающий тег блока "поглотит" немедленно следующий за ним переход на новую строку, если таковой будет обнаружен.

<?php
    echo 'Это тест';
?>

<?php echo 'Это тест' ?>

<?php echo 'Мы опустили последний закрывающий тег';

Замечание: закрывающий тег PHP-блока в конце файла не является обязательным, и в некоторых случаях его опускание довольно полезно, например, при использовании include или require, так, что нежелательные пробелы не останутся в конце файла и вы все еще сможете добавить http-заголовки после подключения к ответу сервера. Это также удобно при использовании буферизации вывода, где также нежелательно иметь пробелы в конце частей ответа, сгенерированного подключаемыми файлами.

Рекомендуемые статьи:

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *