<rmcreative>

RSS

Короткие теги в PHP

10 июня

Почти десять лет назад я писал про короткие теги и радовался включению короткого echo по умолчанию.

Сегодня меня спросили, что я думаю по поводу использования коротких тегов.

Их осталось на данный момент в PHP 7.4 два вида:

  • <? - короткая форма <?php. Включается через short_open_tag в php.ini.
  • <?= - короткая форма <?php echo. Доступна всегда.

Если с <?= всё ясно, тег доступен всегда и удобен при использовании в шаблонах, то с <? не всё так просто.

В PHP 7.4 его хотели убрать и почти убрали после положительного голосования за RFC. Но в итоге сначала предложили сделать это по-другому, а потом и вовсе не делать.

В результате в PHP 7.4 теги работают как и ранее. В PHP 8 тоже (но не факт, что так будет в релизе).

Стоит ли использовать <? - вопрос неоднозначный. Если у вас проект, который разворачивается только на ваши сервера, вы контролируете php.ini и никогда не забываете short_open_tag = On, то технически ничего ужасного в использовании коротких тегов нет. Если же вы делаете продукт, который можно поставить на свой сервер, такой как CMS или фреймворк, то использовать <? - плохая идея. Часть пользователей обязательно попробует развернуть ваш продукт в окружении, где у них нет возможности поправить php.ini.

Комментарии RSS

  1. №11898
    scorp13
    scorp13 10 июня 2020 г., 12:25:07

    Проще говоря, лучше не используйте <?

  2. №11899
    Рома
    Рома 10 июня 2020 г., 12:37:46

    Я в принцие не погу представить себе веловека, который будет всерьёз обсуждать вопрос короткого тега для нового кода.

    Но если уж рассуждать, то должно быть так: "если у вас проект, который разворачивается только на ваши сервера, вы контролируете php.ini, вы до сих пор не используете шаблонизатор и хотите заложить бомбу замедленного действия под свой код, то можно шарашить короткий тег". Во всех остальных случаях вопрос тегов либо вообще не принципиален, либо надо использвать длинный.

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

    Понять Зеева можно - всем, кто сидел на платной поддержке продуктов Зенд, очевидны обратные стороны депрекаций - лишняя нагрузка на поддержку при миграции на новую версию. И если вредные настройки типа регистр жлобалс неизбежны, то короткий тег никому не мешает и непонятно, зачем на пустом месте приниматься его судорожно выпиливать из легаси при переходе на новую версию.

    Но понять людей, которые всерёз ставят такой вопрос в отношении нового кода я не могу.

  3. №11900
    Serge
    Serge 10 июня 2020 г., 13:46:16

    а почему бы не включить короткие теги в целом по умолчанию?

  4. №11901
    Andrey
    Andrey 11 июня 2020 г., 7:51:02

    Если "тег [<?=] доступен всегда и удобен при использовании в шаблонах", то является ли багом, что локализатор yii message не видит в шаблоне конструкцию <?= Yii::t('app', 'foo') ?>, но видит <?php echo Yii::t('app', 'foo') ?> ?

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

  5. №11902
    Денис Радченко
    Денис Радченко 11 июня 2020 г., 11:20:51

    за короткий тег <? нужно бить по голове. Устанавливаешь сайт, а он не работает, оказывается всего-то нужно заменить <? на длинные теги.

  6. №11904
    Sam
    Sam 12 июня 2020 г., 10:38:43

    Serge, вполне можно было бы тогда использовать короткие всегда.

    Andrey, да, это похоже на баг. Создайте issue, будем разбираться.

  7. №11905
    Эльдар
    Эльдар 16 июня 2020 г., 16:33:56

    Не знаю как сейчас, но раньше phpStorm комментировал куски кода с с короткими тегами криво, в результате получал рендеринг кусков кода) Особенно когда правишь баги на проде, под утро, на след день видишь на проекте эти скобки в html... После это я совсем отказался от них и всем советовал.

  1. Почта опубликована не будет.

  2. Можно использовать синтаксис Markdown или HTML.

  3. Введите ответ в поле. Щёлкните, чтобы получить другую задачу.