Обязательно ли ставить закрывающий тег?

Присутствующий после закрывающего тэга пробел (или любой другой симфол) сигнализирует PHP о начале вывода данных.
И произойдет это в момент подключения файла (include). И дальнейшая отладка ошибок при работе с куками или с сессиями, или просто отправка заголовков (редирект, авторизация, что-нибудь еще важное) превратится в сущий ад, поскольку искать этот пробел придется самому глазами по всем файлам. Если вообще возникнет мысль, что проблема в пробеле.
Если в момент инклюда будет включена буферизация, проблема оттягивается еще на один порядок и больше шанса, что вылезет она только на боевом сайте.
Почему в php файлах не рекомендуется ставить закрывающийся тег
Когда PHP обрабатывает файл, он ищет открывающие и закрывающие теги, такие как <?php и ?> , которые указывают PHP, когда начинать и заканчивать обработку кода между ними. Подобный способ обработки позволяет PHP внедряться во все виды различных документов, так как всё, что находится вне пары открывающих и закрывающих тегов, будет проигнорировано парсером PHP.
PHP включает в себя короткий echo-тег <?= , который является сокращением для более многословного <?php echo .
Пример #1 Открывающие и закрывающие теги PHP
1. <?php echo ‘если вы хотите хранить код PHP в документах XHTML или XML,
то используйте эти теги’ ; ?>
2. Вы можете использовать короткий ‘echo’-тег чтобы <?= ‘напечатать эту строку’ ?> .
Этот тег эквивалентен такому коду
<?php echo ‘напечатать эту строку’ ?> .
3. <? echo ‘этот код с короткими тегами, но он будет работать только если ‘.
‘включена опция «short_open_tag»‘; ?>
Короткие теги (третий пример) доступны по умолчанию, но их можно отключить с помощью директивы short_open_tag в конфигурационном файле php.ini или отключены по умолчанию, если PHP был скомпилирован с опцией —disable-short-tags.
Замечание:
Поскольку короткие теги можно отключить, рекомендуется использовать только обычные теги ( <?php ?> и <?= ?> ) для максимальной совместимости.
Если файл содержит только код PHP, предпочтительно опустить закрывающий тег в конце файла. Это помогает избежать добавления случайных символов пробела или перевода строки после закрывающего тега PHP, которые могут послужить причиной нежелательных эффектов, так как PHP начинает выводить данные в буфер при отсутствии намерения у программиста выводить какие-либо данные в этой точке скрипта.
<?php
echo «Hello world» ;
echo «Последнее выражение» ;
// Скрипт заканчивается тут без закрывающего тега PHP
User Contributed Notes 2 notes
<!DOCTYPE html>
<html lang=»en»>
<head>
<meta charset=»UTF-8″>
<meta http-equiv=»X-UA-Compatible» content=»IE=edge»>
<meta name=»viewport» content=»width=device-width, initial-scale=1.0″>
<title>Document</title>
</head>
<body>
<h1>PHP Language</h1>
<?php echo «1) PHP Special Syntax Code» ; ?> <br>
<?= «2) PHP Special Syntax Code» ; ?> <br>
If you want your file to be interpreted as php then your file must start and end with <?php and ?> and everything outside of that is ignored by the php parser.
<?php
php code .. //parsed
php code .. //parsed
?>
hellow..//normal test but ignred by php parser
Three types of tag are available in php
1.normal tag( <?php ?> )
2.short echo tag( <?= ?> )
3.short tag(<? ?>)
short tag are bydefault available but can be disabled by short_open_tag = Off and also disabled bydefault if php will built with —disabe—short—tags()
As short tag can be disabled so only use the normal and short echo tag.
If your file only have php code then do not use closing tag.
<?php
//php code;
//php code;
//php code;
but if you are embedding php with html then enclose php code with opening and closing tag .
< html >
< head >
</ head >
< body >
<? php
//php code;
//php code;
//php code;
If you want to just print single text or something ,you should use shorthand version . <?= $var ?>
But if you want to process something, you should use normal tag.
<?php
//$var = 3;
//$var2 = 2;
//$var3 = $var+$var2;
//if($var3)/result>
?>
If you embedded php with html and single line, do not need to use semicolon
<html>
<head>
<body>
<?= $var ?>
</body>
</head>
</html>
but if you have multiple line, then use semicolon.
<?php
//line 1;
//line 2;
//line 3;
?>
Закрывающийся тег php ?>
Если файл содержит только код PHP, предпочтительно опустить закрывающий тег в конце файла. Это помогает избежать добавления случайных символов пробела или перевода строки после закрывающего тега PHP, которые могут послужить причиной нежелательных эффектов, так как PHP начинает выводить данные в буфер при отсутствии намерения у программиста выводить какие-либо данные в этой точке скрипта.
И так и так будет правильно. Закрывающие теги обязательны для html файлов содержащих php код(хотя правильней будет сказать «php файлов содержащих html код). Но если у Вас файл только с php кодом, то закрывающий тег ставить не обязательно.
Если вдаваться в подробности, то для вывода php, серверу нужно не просто отдать браузеру файл «как есть»(как в случае с html) а вызвать php интерпретатор. PHP интерпретатор будет считывать(и выполнять) код до тех пор пока не встретит закрывающий тег или пока не встретит конец файла. Так что можете использовать и не использовать закрывающие теги.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.3.11.43304
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Стоит ли закрывать теги PHP-кода?
Даже те, кто скромно разбирается в PHP, знают, что код должен быть заключен в специальные теги <? Php и?>.
Вы также можете знать, что код PHP может быть разделен с помощью менее используемых тегов <script language = “php”> и </ script>. Если short_open_tag включен в php.ini, вы можете использовать <? и?> хотя их следует избегать, если вы встраиваете код в XHTML или XML. Наконец, вы можете использовать теги <% и%> в стиле ASP, если asp_tags установлен в php.ini.
Однако, если ваш файл содержит только PHP – и не содержит экранированного HTML-кода – закрывающий тег?> Не является обязательным. Многие разработчики утверждают, что ненужный код должен быть удален, но есть еще одна причина, по которой вы можете рассмотреть удаление закрывающего тега. Предположим, у нас есть библиотека функций PHP с именем library.php :
Библиотека включена в наш основной входной файл index.php :
К сожалению, при загрузке этой страницы появляются 2 предупреждения с одним и тем же сообщением:
Или хуже, если вы могли бы работать в реальной среде, где предупреждения были отключены, и сообщение не появляется. В любом случае, ни заголовок, ни cookie не установлены, и это может вызвать критические проблемы приложения. Что вызывает ошибку? Вы не можете видеть это, но после закрывающего символа есть пробел?> В файле library.php. Когда он находится в верхней части index.php, это пространство отправляется в браузер как содержимое страницы вместе со всеми необходимыми заголовками HTTP. После отправки первого блока содержимого невозможно установить дополнительные заголовки или файлы cookie.
Современные версии PHP устанавливают флаг output_buffering в php.ini. Это буферизует ваш вывод HTML и отправляет его, когда ваш PHP-код был обработан или когда буфер достигает предела (например, 4096 байт). Вы также можете использовать PHP ob_start() ob_end_flush() Даже если вы уверены, что буферизация всегда включена, рекомендуется установить заголовки HTTP и файлы cookie перед отправкой содержимого страницы.
Ваше PHP-приложение может включать в себя десятки файлов библиотек или классов. Как вы можете себе представить, может быть трудно найти дополнительные пробелы, возврат каретки или любые другие символы после закрытия?>. К счастью, это легко исправить. Если вы пропустите закрытие?> Во всех ваших файлах кода только для PHP, ошибка просто не может произойти – парсер будет игнорировать пробелы. Это решение, но вы бы его использовали? Это заставляет меня чувствовать себя немного грязным … Вы уже опускаете закрывающий тег?>? Примешь ли ты практику? Или это просто неправильно?