Короткие теги в PHP
10 июня 2020
Почти десять лет назад я писал про короткие теги и радовался включению короткого 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 по email OK
Проще говоря, лучше не используйте <?
Я в принцие не погу представить себе веловека, который будет всерьёз обсуждать вопрос короткого тега для нового кода.
Но если уж рассуждать, то должно быть так: "если у вас проект, который разворачивается только на ваши сервера, вы контролируете php.ini, вы до сих пор не используете шаблонизатор и хотите заложить бомбу замедленного действия под свой код, то можно шарашить короткий тег". Во всех остальных случаях вопрос тегов либо вообще не принципиален, либо надо использвать длинный.
Отдельным пунктом должно быть "если у вас огромная пахучая куча легаси, использующая короткий тег, то на время можно расслабиться".
Понять Зеева можно - всем, кто сидел на платной поддержке продуктов Зенд, очевидны обратные стороны депрекаций - лишняя нагрузка на поддержку при миграции на новую версию. И если вредные настройки типа регистр жлобалс неизбежны, то короткий тег никому не мешает и непонятно, зачем на пустом месте приниматься его судорожно выпиливать из легаси при переходе на новую версию.
Но понять людей, которые всерёз ставят такой вопрос в отношении нового кода я не могу.
а почему бы не включить короткие теги в целом по умолчанию?
Если "тег [<?=] доступен всегда и удобен при использовании в шаблонах", то является ли багом, что локализатор yii message не видит в шаблоне конструкцию <?= Yii::t('app', 'foo') ?>, но видит <?php echo Yii::t('app', 'foo') ?> ?
Я некоторое время назад это заметил, убедился по коду что он и правда не учитывается и решил что вы считаете <?= таким же злом и теперь стараюсь не использовать.
за короткий тег <? нужно бить по голове. Устанавливаешь сайт, а он не работает, оказывается всего-то нужно заменить <? на длинные теги.
Serge, вполне можно было бы тогда использовать короткие всегда.
Andrey, да, это похоже на баг. Создайте issue, будем разбираться.
Не знаю как сейчас, но раньше phpStorm комментировал куски кода с с короткими тегами криво, в результате получал рендеринг кусков кода) Особенно когда правишь баги на проде, под утро, на след день видишь на проекте эти скобки в html... После это я совсем отказался от них и всем советовал.
Если уже есть слухи, что уберут - не используйте. Смотрите всегда , как делают большинство. Всем мира и от кво мастера приветец )))