Закрывающий тег (?>) В файлах PHP?

17

Некоторые люди клянутся, закрывая свои PHP-файлы ?>, другие говорят, что он более оптимизирован, чтобы его отключить.

Я знаю, что не обязательно иметь это там, мне просто интересно, какие плюсы и минусы в этом и какова лучшая практика.

Стив Роббинс
источник
Некоторые люди предполагают, что словосочетание «более оптимизированный» означало «будет работать быстрее». Говорящий (чей родной язык может быть не английским) мог иметь в виду нечто большее, чем «более оптимальный» или «лучшая практика».
Скотт С. Уилсон

Ответы:

27

Это не столько вопрос производительности - разбор трейлинга ?>тривиален и вообще ничего не изменит, если только вы не включаете миллион файлов в секунду.

IIRC, php.net рекомендует НЕ добавлять ?>, и причины идут примерно так:

  • это ненужно
  • Легко случайно добавить значительный пробел после ?>, который будет выводиться клиенту, что, в свою очередь, может привести к неясным ошибкам «заголовки уже отправлены» (это происходит, когда включаемый файл содержит пробелы, и вы пытаетесь установить заголовок после включая этот файл)
tdammers
источник
Основываясь на ответах здесь (особенно в отношении пустого нежелательного пробела, вызывающего ошибки "заголовки уже отправлены"), я изменил свою привычку неукоснительно включать?> В конец файла PHP. Я заметил, что когда я создал новый файл с помощью PHPStorm, шаблон просто вставил <? Php без закрывающего тега?> И подумал, что это просто неаккуратное кодирование. Теперь я знаю лучше.
tcrosley
Именно эта причина - «заголовки уже отправлены» - была причиной, по которой мой работодатель строго запрещал это (большой веб-портал). Одно дело, когда ты забываешь это в конце файла, который ты только что написал. Другое дело, если вы редактируете библиотечную запись, которая состоит из 3 элементов и включает в себя глубину, ваш текстовый редактор вставляет пробелы без вашего ведома, и вдруг кусок портала, управляемый парнями в 2 зданиях, перестает работать. Дерево включений часто содержит более 100 файлов, и обнаружение ошибки становится терпеливым упражнением. Ожидайте «глубокую благодарность» через несколько недель, так как ошибка найдена и прослежена до вас.
SF.
1
PHP, отправляющий пробел после закрывающего тега, является еще одним примером плохих языковых решений.
user949300
12

Нет, они не правы.

?>необязательно в PHP в конце файла. И вы найдете вескую причину для этого. Наиболее важным является то, что пустое место в конце файла не помешает вам отправлять заголовки. Это трудная ошибка для обнаружения, потому что вы можете найти ее в любом файле в любом месте.

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

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

deadalnix
источник
4

Я думаю, что новичкам рекомендуется не добавлять его, чтобы они не вызывали случайную отправку дополнительных символов новой строки. Поскольку это не обязательно, как вы упомянули, я думаю, что общая причина заключается в том, что лучше избегать ошибок.

Я не думаю, что с этим связана какая-то «оптимизация».

Я хотел бы указать вам здесь: /programming/4410704/php-closing-tag и здесь: /programming/3219383/why-do-some-scripts-omit-the -closing-PHP-тег

manojlds
источник
1
новички или нет ... просто нет причин (кроме случаев ОКР) иметь их
Mchl
@Mchl Я хотел бы отметить, что причины ухода довольно тривиальны, и в конце концов это просто сводится к предпочтению программиста, и это не проблема ОКР ...
Кеннет
1
Я съеживаюсь всякий раз, когда вижу ?>в файлах, содержащих чистый PHP.
Авиатор с кофеином
@ Кеннет: Если они тривиальны - я их не вижу. OCD часть была задумана как шутка.
MCHL