В стандарте кодирования Zend Framework упоминается следующее:
Для файлов, содержащих только код PHP, закрывающий тег («?>») Никогда не разрешается. Он не требуется PHP, и его исключение предотвращает случайную инъекцию конечных пробелов в ответ.
Однако я помню, как слышал о проблеме (с инструментами или включая, может быть?), Где файлы должны иметь закрывающий тег.
Кто-нибудь знает о каких-либо проблемах (кроме проблемы с разработчиком, требующей симметрии), где вам нужно иметь закрывающие теги или они вообще плохой идеей?
Удаление закрывающих тегов, когда вы можете, вероятно, является лучшей практикой. Причина в том, что если у вас есть какой-либо символ (даже пробел) за пределами?? В php-файле, он может остановить такие вещи, как заголовки, чтобы перестать работать, если символ отправляется в браузер до того, как заголовок будет установлен.
Если вы используете закрывающие теги PHP, вы можете легко найти файлы, которые были случайно усечены (например, они не были загружены полностью).
Однако такая проблема должна быть устранена путем обеспечения надежной файловой системы и передачи, а не добавления PHP-канарейных тегов 🙂
Другая возможная причина заключается в том, что стандарты кодирования PEAR требуют этого. Они требуют этого, потому что они требуют этого, и вам не разрешается подвергать сомнению стандарты кодирования PEAR.
Вы можете рассмотреть тег открытия php для файлов только для php, как своего рода строку shebang (например, #! / Bin / bash), таким образом вам не нужен закрывающий тег.
Мы также следуем за стандартом ZF, без закрывающего тега для файлов только для php. Но я никогда не слышал о каком-либо инструменте, который не смог бы проанализировать файл из-за отсутствующего закрывающего тега, и я пока не сталкивался с какими-либо проблемами, пока не использовал его.
Я всегда пишу закрывающий тег для php-файлов и целенаправленно не следую ему с пробелами или eol.
Стандарт подразумевает, что если закрывающий тег опущен, он будет неявно предоставлен. Но это не освобождает разработчика от написания надлежащего html / xml.
И могут быть случаи, когда два файла объединены вне обработки html / php, а отсутствующий тег может вызвать крайнее горе.
Я всегда их вставляю, потому что я рассматриваю их как причудливую закрывающую скобку – так как, когда я пишу условные и циклы, я помещал в открытую / закрывающую пару фигур перед написанием кода, я делаю это с файлами PHP.
Является ли это «правильным» или нет, я часто получаю «чистые» PHP-файлы в «непустые», и закрывающий тег чрезвычайно полезен.
Я всегда использую закрывающие теги, это просто не выглядит красиво без них. Это также не допустимая инструкция обработки xml без них (не то, что вам небезразлично, что единственное, что есть в файле php)
Мы используем Drupal, который всегда пропускает закрывающий тег, и из-за этого у него не было никаких проблем.
Поскольку он всегда работал на Drupal (и я знал, что, читая руководство, это было необязательно), я однажды создал файл конфигурации (который содержал только PHP-код) без закрывающего тега. По какой-то причине это не сработало до тех пор, пока (по настоянию коллеги) я добавил закрывающий тег. В то время мы не пытались выяснить причину.
Я всегда использовал закрывающий тег в коде, который я пишу; он выглядит более симметричным, концептуально «закрывает» открывающий тег, и я всегда стараюсь не оставлять лишних пробелов после закрывающего тега.
Проверка ошибок кодирования не работает при конкретизации нескольких файлов. Я использую следующую команду оболочки, чтобы проверить наличие ошибок.
find . -name '*.php' | xargs cat | php -l
Конечно, следующая команда все еще работает (и отображает имя файла поврежденного файла)
find . -name '*.php' | while read filename; do php -l $filename | grep -v 'No syntax errors '; done
Но это намного медленнее.
Наш офис работает с приложениями для электронного обучения, встроенными в Flash, и на ранних этапах мы обнаружили, что, если закрывающий тег отсутствует на сценариях на стороне сервера, он нарушает наш механизм связи с приложениями e-learnng.
Одно из предостережений в этом заключается в том, что наш процесс отладки сначала не попробовал его в упрощенной среде, чтобы убедиться, что это не комбинация отсутствующих закрывающих тегов и некорректный вывод, исходящий из какого-то другого сценария ….
В ответ на @ gabriel1836 закрывающие теги на стороне сервера не имеют значения, когда дело касается приложений Flash; в чем важна полезная нагрузка, возвращаемая сервером в ответ на запрос на удаленную передачу с помощью приложения Flash. Опускание закрывающего тега только на PHP-файлах повлияет на это только в том случае, если ложный вывод не будет возвращен до отправки заголовков в ваше Flash-приложение.
В ответ на @CesarB, если вы не можете дать конкретный, воспроизводимый пример, все, что вы делаете, – это распространение FUD. В руководстве PHP очень ясно, что закрывающий тег является необязательным.