Почему в php файлах не рекомендуется ставить закрывающийся тег
Перейти к содержимому

Почему в php файлах не рекомендуется ставить закрывающийся тег

  • автор:

Почему в php файлах не рекомендуется ставить закрывающийся тег

Когда PHP обрабатывает файл, он ищет открывающие и закрывающие теги, такие как , которые указывают PHP, когда начинать и заканчивать обработку кода между ними. Подобный способ обработки позволяет PHP внедряться во все виды различных документов, так как всё, что находится вне пары открывающих и закрывающих тегов, будет проигнорировано парсером PHP.

Пример #1 Открывающие и закрывающие теги PHP

Короткие теги (третий пример) доступны по умолчанию, но их можно отключить с помощью директивы short_open_tag в конфигурационном файле php.ini или отключены по умолчанию, если PHP был скомпилирован с опцией —disable-short-tags.

Замечание:

Поскольку короткие теги можно отключить, рекомендуется использовать только обычные теги ( и ) для максимальной совместимости.

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

echo «Последнее выражение» ;

// Скрипт заканчивается тут без закрывающего тега PHP

Необязательный закрывающий тег PHP

Проводя очередной Code Inspection в превосходной среде JetBrains PhpStorm 6.0 наткнулся на следующий результат.

В файлах, где содержался чистый PHP-код (без примеси HTML) на строке с закрывающий тегом «?>» анализатор выдал Redundant closing tag. Что означает «Избыточный закрывающий тег».

Полез читать. Оказывается, теги действительно не рекомендуется закрывать, поскольку если случайно после тега оставить, например, пробел, то он соответственно попадет в выходной поток и породит ошибку headers already sent.

Для меня это было открытием, я всегда их ставил дабы выдержать «правильное» оформление кода. На всяческих форумах пишут, что мол это указано в каждой книжке для чайников. Я открыл свою книжку и не нашел там такого. Большую часть знаний по PHP были получены не из книжек, а из интернета. И там я такого не встречал.

Вот ссылка на php.net по этому поводу.
И выдержка:

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

Закрывающийся тег php ?>

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

Отслеживать
124k 24 24 золотых знака 131 131 серебряный знак 312 312 бронзовых знаков
ответ дан 23 янв 2013 в 16:29
7,418 17 17 серебряных знаков 22 22 бронзовых знака

И так и так будет правильно. Закрывающие теги обязательны для html файлов содержащих php код(хотя правильней будет сказать «php файлов содержащих html код). Но если у Вас файл только с php кодом, то закрывающий тег ставить не обязательно.

Если вдаваться в подробности, то для вывода php, серверу нужно не просто отдать браузеру файл «как есть»(как в случае с html) а вызвать php интерпретатор. PHP интерпретатор будет считывать(и выполнять) код до тех пор пока не встретит закрывающий тег или пока не встретит конец файла. Так что можете использовать и не использовать закрывающие теги.

Отслеживать
ответ дан 23 янв 2013 в 16:36
3,724 14 14 серебряных знаков 16 16 бронзовых знаков

То есть в современном PHP 8+ нет нужды опускать закрывающий тег, как это расписано здесь stackoverflow.com/questions/4410704/… ?

Почему в php файлах не рекомендуется ставить закрывающийся тег

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

Пример #1 Пример, показывающий закрывающий тег, охватывающий завершающую новую строку

Нет новой строки

Результат выполнения приведённого примера:

Какой-то текстНет новой строки А сейчас, новая строка

Примеры входа и выхода из парсера PHP:

echo ‘Это тест’ ;
?>

Замечание:

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

Добавить комментарий

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