Закрити чи не закрити php


14

Я прочитав, що радимо (особливо з php 7) не закривати файли php ?>

Багато моїх PHP-файлів WP закінчуються так:

<?php get_sidebar(); ?>
<?php get_footer(); ?>

Чи слід видалити закриваючий тег і мати щось подібне

<?php get_sidebar(); ?>
<?php get_footer(); 

наприкінці моїх файлів?


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

1
Можливо пов'язаний квиток на trac: # 10633
Свен

Відповіді:


19

Так, будь ласка, уникайте закриття тегів PHP в кінці файлу не тільки з PHP 7, але і з PHP 5.

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

Я здогадуюсь, що ти коли-небудь стикався з таким повідомленням

Неможливо змінити інформацію заголовка - заголовки, які вже надіслані (вихід розпочато з ...) у ... on line ...

?>Причиною може стати закриття в кінці файлу.


1
Я вважаю, що це правильна відповідь. Навіть підкреслення , звідки я спочатку отримав свій шаблон, видалив завершальний тег в останньому оновлення.
IXN

@IXN Це правильно, якщо весь файл PHP і тому складається з одного блоку коду PHP (блок коду PHP неявно закритий в кінці файлу). Однак якщо у вас є кілька блоків коду PHP і змішуєте HTML і PHP, як це випливає з прикладу у вашому запитанні, вам слід явно закрити блок коду PHP, як заявляє TheDeadMedic у своїй відповіді.
MrWhite

Я думаю, єдиний виняток - якщо останній блок коду PHP дотримується html. Але якщо останні символи у файлі є?> Їх можна / слід опустити. Або так я розумію.
IXN

Основна причина пропускання (або включення) закриваючого тега PHP - уникати введення дурних помилок під час розробки. Як було сказано вище, для повністю PHP-файлу це дозволяє уникнути випадкового виводу, що призведе до помилки. Для файлу, який вже змішує вихід HTML та PHP, це не може призвести до помилок. Однак упущення тега PHP, що закривається, у цьому другому випадку має потенціал для введення помилок, оскільки вам зараз потрібно пам’ятати, що явно закрити тег PHP перед тим, як додати контент HTML в кінці - це не те, що ви робите в цілому файлі коду PHP.
MrWhite

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

11

З огляду на ваш конкретний приклад, я б зберігав тег завершення, тобто однолінійна функція виклику всередині шаблону. Це послідовно і сприяє ясності (так само, як WordPress рекомендує промальовувати коси для масивів ) - інакше уявіть, чи не розробник забрав ваш файл і почав додавати його:

<?php get_footer();

<div>What the hell am I doing wrong?</div>

Однак для всіх інших файлів (функцій, включень тощо) порада, безумовно, є хорошою ідеєю:

<?php // Start of file

class MY_Class {
    function just_do_it() {
    }
}

// Bye bye closing tag

Я вважаю, що це чистіше, і як уже згадували інші, жодного ризику страхітливих «заголовків вже не надіслано».

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.