Закриваючий тег (?>) На PHP-файлах?


17

Деякі люди клянуться, закриваючи свої файли PHP ?>, а деякі кажуть, що це оптимізовано, щоб їх не було.

Я знаю, що не важливо, щоб це було там, мені просто цікаво, які плюси і мінуси мають це робити, і яка найкраща практика.



Деякі люди припускають, що фраза "більш оптимізована" мала означати, що "біжить швидше". Доповідач (чиєю першою мовою може бути не англійська) може бути призначений щось більше, як "більш оптимальне" або "краща практика".
Скотт С Вілсон

Відповіді:


27

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

IIRC, php.net рекомендує НЕ додавати ?>, а причини такі:

  • це зайве
  • легко випадково додати значну пробіл після того ?>, який буде виведений клієнтові, що, в свою чергу, може призвести до неясних помилок 'вже відправлені заголовки' (це відбувається, коли включений файл містить пробіл, і ви намагаєтеся встановити заголовок після включаючи цей файл)

На підставі відповідей тут (особливо щодо порожнього небажаного пробілу, що спричиняє помилки "вже відправлені заголовки"), я змінив звичку релігійно включати?> ​​В кінці файлу PHP. Я помітив, що коли я створив новий файл із PHPStorm, шаблон просто вставив <? Php без закривального тега?>, І подумав, що це просто неохайне кодування. Тепер я знаю краще.
tcrosley

Ця точна причина - "заголовки вже надіслані" - була причиною, яку мій роботодавець жорстко заборонив (великий веб-портал). Це одне, коли ви забудете це в кінці файлу, який ви тільки що написали. Інша справа, якщо ви редагуєте запис бібліотеки, який містить 3, включає глибокий, ваш текстовий редактор вставляє пробіл, не знаючи про вас, і раптом фрагмент порталу, яким керують хлопці в двох будинках, перестає працювати. Дерево включає часто 100+ файлів, пошук помилки стає вправою терпіння. Очікуйте візиту "глибокої подяки" через кілька тижнів, коли помилка буде знайдена і відстежена до вас.
СФ.

1
PHP, що надсилає пробіл після закриття тегу, є ще одним прикладом поганих мовних рішень.
user949300

12

Ні, вони помиляються.

?>необов’язково в PHP в кінці файлу. І ви знайдете для цього вагомі причини. Найважливішим є те, що порожній пробіл у кінці файлу не завадить вам надсилати заголовки. Це важко виявити помилку, оскільки її можна знайти в будь-якому файлі в будь-якому місці.

Звичайний спосіб зробити це помістити завершальний тег, коли PHP змішується з HTML, а не ставити його для чистих PHP-файлів. Це навіть стандарт кодування з ZEND Framework та багато інших.

Оптимізований означає, що код працює швидше. Це легко довести їх неправильно. Профілюйте код і з’ясуйте, що вони говорять вам фігня.


4

Я думаю, що новачкам рекомендується уникати їх додавання, щоб вони не спричинили випадкові надсилання додаткових символів. Оскільки не важливо мати його так, як ви згадали, я думаю, загальне міркування полягає в тому, що краще залишити його, щоб уникнути помилок.

Я не думаю, що з цим пов'язана якась "оптимізація".

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


1
новачків чи ні ... просто немає причин (крім випадків OCD) мати їх
Mchl

@Mchl Я хотів би зазначити, що причини відходу досить тривіальні, і врешті-решт це просто зводиться до уподобань програміста і його насправді не проблема OCD ...
Кеннет

1
Я бачу ?>в будь-який час, коли я бачу файли, що містять чистий PHP.
Авіатор з кофеїном

@Kenneth: Якщо вони банальні - я не можу їх побачити. Частина OCD мала на увазі жарт.
Mchl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.