Закрывать или не закрывать php

14

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

Многие из моих файлов php WP заканчиваются так:

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

Должен ли я удалить закрывающий тег и получить что-то вроде этого

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

в конце моих файлов?

IXN
источник
2
Если после вашего не закрытого тега php ничего нет, то все в порядке, как я заметил во многих фреймворках, таких как Laravel, они не закрывают тег php в конце файлов, и, кстати, файлы ядра WordPress также следовали тому же шаблон, а не закрытый тег php в конце, поэтому я думаю, что мы должны следовать стилю кодирования WordPress, а не закрывать их.
Амирмасуд
1
Возможно связанный билет на траке: # 10633
Свен

Ответы:

19

Да, пожалуйста, не закрывайте теги PHP в конце файла, не только с PHP 7, но и с PHP 5.

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

Я думаю, что вы когда-либо сталкивались с сообщением, как

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

Закрытие ?>в конце файла может быть причиной.

Gmazzap
источник
1
Я считаю, что это правильный ответ. Даже Underscores , откуда я изначально получил свой шаблон, удалил закрывающий тег в последнем обновлении.
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

Я считаю, что это чище, и, как уже упоминали другие, нет никакого риска страшных "заголовков уже отправлено".

TheDeadMedic
источник