Я <?= ?>
недавно сталкивался с этим тегом PHP и неохотно им пользуюсь, но он так сильно чешется, что я хотел, чтобы вы его взяли. Я знаю , что это плохая практика , чтобы использовать короткие тег , <? ?>
и что мы должны использовать полные тег <?php ?>
вместо этого, но что об этом один: <?= ?>
?
Это сэкономит некоторую печатность и будет лучше для читабельности кода, IMO. Итак, вместо этого:
<input name="someVar" value="<?php echo $someVar; ?>">
Я мог бы написать это так, что чище:
<input name="someVar" value="<?= $someVar ?>">
Не одобряется ли использование этого оператора?
echo
очень легко ведет к XSS, и вам лучше полагаться на метод эхом, зависящий от контекста (т.е. наличиеfunction html($x) { echo htmlentities($x,...); }
и использованиеhtml($someVar);
вместоecho $someVar
или использованиеecho json_encode($x);
для контекста JS). Это делает<?=
тэги плохой практикой, потому что это означает, что вы экранировали содержимое переменной HTML в другом месте, и поэтому другое место должно волшебным образом знать, что эта переменная должна быть экранирована HTML, потому что она отражается в контексте HTML.Ответы:
история
Прежде чем поезд дезинформации выйдет слишком далеко от станции, нужно кое-что понять о коротких тегах PHP.
Основная проблема с короткими тегами PHP заключается в том, что PHP удалось выбрать тег (
<?
), который использовался другим синтаксисом, XML .При включенной опции вы не смогли получить необработанный вывод объявления xml без получения синтаксических ошибок:
Это большая проблема, если учесть, насколько распространен XML-анализ и управление.
Как насчет
<?=
?Хотя
<?
вызывает конфликты с XML,<?=
не делает . К сожалению, варианты его включения и выключения были привязаныshort_open_tag
, а это означало, что для получения выгоды от использования короткого тега echo (<?=
) вам пришлось столкнуться с проблемами короткого открытого тега (<?
). Проблемы, связанные с коротким открытым тегом, были намного больше, чем преимущества короткого эхо-тега, поэтому вы найдете миллион с половиной рекомендаций поshort_open_tag
отключению, которые вам следует .В PHP 5.4, однако, короткий эхо-тег был повторно включен отдельно от
short_open_tag
опции. Я рассматриваю это как прямое подтверждение удобства<?=
, так как в этом нет ничего принципиально неправильного.Проблема в том, что вы не можете гарантировать, что получите,
<?=
если попытаетесь написать код, который мог бы работать в более широком диапазоне версий PHP.Хорошо, теперь, когда все это не в порядке
Вы должны использовать
<?=
?источник
<?=
в будущем удалят, вы можете исправить это менее чем за минуту, независимо от того, сколько тысяч файлов его используют, вы просто выполняете поиск и замену<?=
для всего проекта<?php echo
. Мой ответ - не беспокойтесь, а просто используйте его , преимущества значительно перевешивают последствия.<?=
больше не расценивается как короткий ярлык, сам Расмус Лердорф совершил это.<?=
всегда будет включен ( stackoverflow.com/a/6064813/156257 ) и большую часть времени они были включены. Вы можете доказать, что я не прав, проверив у своего хоста, если: они отключены и используют PHP <5.3, и если они не позволяют настройке быть переопределенными пользователями или по специальному запросу; если все предыдущее ложно, непременно переживайте<?=
.<?=
будут удалены, и я тоже. Другие могут быть, и если они, они не должны использовать<?=
. Некоторые люди иррационально боятся использовать определенные языковые функции ( например, не использовать закрывающие теги в php ).Стереть мою шляпу PHP
Я определенно одобрил бы использование
<?= $someVar ?>
более многословногоecho
(просто личное предпочтение). Только недостаток AFAIK для пользователей , которые работают предварительно 5.4.0, в этом случаеshort_open_tag
должны быть включены в php.ini .Сказав это, если ваш проект не ОС, то это спорный вопрос. Если это так, я бы либо задокументировал тот факт, что
short_open_tag
s должен быть включен, либо использовал бы более переносимое из двух решений.источник
<?=
, чтоshort_open_tag
на PHP 5.4 это не влияет ,<?
все еще есть, и если у вас есть привычка использовать короткие теги формы, довольно легко забыть, что поддерживается в какой версии.<?=
«Я сейчас вывожу переменную» для использования в стиле шаблона и<?php
«Я сейчас запускаю много кода». Я бы посоветовал никогда не пользоваться<?
, но это и так<?=
и<?php
нормально.Вы должны определенно стараться избегать коротких тегов формы, будь то
<?
или<?=
.Основная техническая причина - мобильность, вы никогда не можете быть уверены, что короткие теги форм будут работать для каждой конкретной настройки, так как они могут быть отключены, посмотрите
short_open_tag
директиву. Но вы всегда можете быть абсолютно уверены, что длинная форма будет работать везде.Это тоже плохая привычка. Я не могу сказать вам, что вы находите более читабельным, но я категорически против использования читабельности кода в качестве предлога, чтобы сэкономить пару нажатий клавиш. Если вы беспокоитесь о читабельности, вам следует использовать шаблонизатор:
гораздо более читабельным из обоих ваших примеров.
Наконец, стоит отметить, что короткие теги форм явно не приветствуются крупными проектами PHP, например, PEAR и Zend Framework .
источник
<?php
аecho
не<?
и<?=
, считаете ли вы это серьезным временем? А что происходит, когда вы перемещаете свой проект на сервер, где по каким-то причинам короткие теги отключены?В PHP-документации четко сказано, что вы можете безопасно использовать короткие эхо-теги:
5.4.0 The tag <?= is always available regardless of the short_open_tag ini setting.
Хотя это для PHP версии 5.4 и выше, но каждый должен по крайней мере использовать это. Я бы предпочел их только для шаблонных целей.
источник
Причины использования коротких тегов:
Причины не использовать короткие теги:
источник
Я думаю, что
<?=
версия является хорошей / приемлемой практикой, при условии, что вы используете ее только для окончательного вывода переменных и избегаете любых вызовов функций или троичной логики, которые не имеют прямого отношения к представлению данных.Это, конечно, намного лучше, чем
<? echo($x); ?>
везде.В долгосрочной перспективе вы можете захотеть взглянуть на движки шаблонов, такие как Smarty .
источник
Начиная с PHP 7.4, игровое поле немного меняется:
<? ?>
официально устарела и будет удалена в PHP 8.0.PHP RFC: устаревшие теги PHP Short open явно указывают, что
<?= ?>
это не затронуто. Это будет указывать (по моему мнению, не RFC), что его использование не рекомендуется.источник
Честно говоря, я думаю, что повторение результата в зависимости от того, какой метод (старый или новый), является чем-то довольно устаревшим, в то время как MVC отмечает 33 года.
Я бы сказал, что да, это хорошая практика - инкапсулировать данные входящего сервера (php) в XML-документ и обрабатывать их на уровне приложений / клиента, таким образом, сохраняя даже идею использования такого тега.
источник