Являются ли короткие теги PHP приемлемыми для использования?
Вот информация согласно официальной документации:
Есть четыре разные пары открывающих и закрывающих тегов, которые можно использовать в PHP. Двое из тех,
<?php ?>
а также<script language="php"> </script>
всегда доступны. Два других - это короткие теги и теги в стиле ASP, которые можно включать и выключать из файла конфигурации php.ini. Таким образом, хотя некоторые люди считают короткие теги и теги стиля ASP удобными, они менее переносимы и, как правило, не рекомендуются.
По моему опыту, на большинстве серверов включены короткие теги. Typing
<?=
гораздо удобнее, чем печатать
<?php echo
Удобство программистов является важным фактором, так почему они не рекомендуются?
25 ответов
Они не рекомендуются, потому что это PITA, если вам когда-либо приходится переносить код на сервер, где он не поддерживается (и вы не можете его включить). Как вы говорите, многие общие хосты поддерживают шорт-тэги, но "лоты" - это не все. Если вы хотите поделиться своими сценариями, лучше всего использовать полный синтаксис.
я согласна с тем что <?
а также <?=
легче программистам, чем <?php
а также <?php echo
но возможно выполнить массовое нахождение и замену, если вы каждый раз используете одну и ту же форму (и не забрасываете пробелы (например: <? php
или же <? =
)
Я не покупаю читабельность в качестве причины вообще. У большинства серьезных разработчиков есть возможность подсветки синтаксиса.
Как упоминает ThiefMaster в комментариях, начиная с PHP 5.4, <?= ... ?>
теги поддерживаются везде, независимо от настроек ярлыков. Это должно означать, что они безопасны для использования в переносимом коде, но это значит, что есть зависимость от PHP 5.4+. Если вы хотите поддерживать pre-5.4 и не можете гарантировать короткие ярлыки, вам все равно придется использовать <?php echo ... ?>
,
Также вам нужно знать, что теги ASP <%,%>, <% = и тег script удалены из PHP 7. Поэтому, если вы хотите поддерживать долгосрочный переносимый код и хотите перейти на самые современные инструменты, рассмотрите возможность изменения этих частей кода.
Я слишком люблю <?=$whatever?>
чтобы отпустить. Никогда не было проблем с этим. Я подожду, пока он не укусит меня в задницу. На самом деле, 85% (моих) клиентов имеют доступ к php.ini в тех редких случаях, когда они отключены. Остальные 15% пользуются услугами хостинг-провайдеров, и практически у всех они включены. Я люблю их.
Начиная с PHP 5.4, ярлык эха является отдельной проблемой от ярлыков, так как ярлык эха всегда будет включен. Теперь это факт:
Так что эхо ярлык сам (<?=
) безопасно использовать сейчас.
Проблема всей этой дискуссии заключается в использовании PHP в качестве языка шаблонов. Никто не утверждает, что теги должны использоваться в исходных файлах приложения.
Однако встраиваемый синтаксис PHP позволяет использовать его как мощный язык шаблонов, а шаблоны должны быть максимально простыми и удобочитаемыми. Многие считают, что проще использовать гораздо более медленный движок для создания шаблонов, такой как Smarty, но для тех пуристов среди нас, которым требуется быстрый рендеринг и чистая кодовая база, PHP является единственным способом написания шаблонов.
Единственный действительный аргумент против использования коротких тегов заключается в том, что они поддерживаются не на всех серверах. Комментарии о конфликтах с XML-документами смешны, потому что, вероятно, вам все равно не следует смешивать PHP и XML; и если вы, вы должны использовать PHP для вывода строк текста. Безопасность никогда не должна быть проблемой, потому что если вы помещаете конфиденциальную информацию, такую как учетные данные для доступа к базе данных, в файлы шаблонов, тогда у вас есть большие проблемы!
Теперь, что касается вопроса о поддержке серверов, по общему признанию нужно знать их целевую платформу. Если общий хостинг является вероятной целью, следует избегать коротких тегов. Но для многих профессиональных разработчиков (таких как я) клиент признает (и действительно зависит от факта), что мы будем диктовать требования к серверу. Часто я сам отвечаю за настройку сервера.
И мы НИКОГДА не работаем с хостинг-провайдером, который не дает нам абсолютного контроля над конфигурацией сервера - в таком случае мы могли бы рассчитывать на выполнение гораздо больших проблем, чем просто потеря поддержки коротких тегов. Такого просто не бывает.
Так что да - я согласен, что использование коротких тегов должно быть тщательно взвешено. Но я также твердо верю, что это ВСЕГДА должно быть вариантом, и что разработчик, который знает о своей среде, должен свободно использовать их.
Короткие теги возвращаются благодаря Zend Framework, выдвигающему " PHP как язык шаблонов" в конфигурации MVC по умолчанию. Я не понимаю, о чем идет речь, большая часть программного обеспечения, которое вы будете производить в течение своей жизни, будет работать на сервере, который вы или ваша компания будете контролировать. Пока вы сохраняете себя последовательным, не должно быть никаких проблем.
ОБНОВИТЬ
После довольно большой работы с Magento, который использует длинную форму. В результате я перешел на длинную форму:
<?php and <?php echo
над
<? and <?=
Похоже, небольшой объем работы для обеспечения взаимодействия.
Следующее - замечательная схема потока того же самого:
Источник: похожий вопрос о разработке программного обеспечения стека обмена
В случае, если кто-то еще обращает на это внимание... Начиная с PHP 5.4.0 Alpha 1 <?=
всегда в наличии:
http://php.net/releases/NEWS_5_4_0_alpha1.txt
Таким образом, похоже, что короткие теги (а) приемлемы и (б) здесь, чтобы остаться. Пока, по крайней мере...
http://uk3.php.net/manual/en/language.basic-syntax.phpmode.php имеет множество советов, в том числе:
в то время как некоторые люди считают короткие теги и теги стиля ASP удобными, они менее переносимы и, как правило, не рекомендуются.
а также
обратите внимание, что если вы встраиваете PHP в XML или XHTML, вам нужно будет использовать
<?php ?>
теги, чтобы соответствовать стандартам.
а также
Следует избегать использования коротких тегов при разработке приложений или библиотек, предназначенных для перераспределения, или развертывания на серверах PHP, которые не находятся под вашим контролем, поскольку короткие метки могут не поддерживаться на целевом сервере. Для переносимого распространяемого кода не используйте короткие теги.
Примечание: начиная с PHP 5.4 короткий тег, <?=
, теперь всегда доступен.
Короткие теги не включены по умолчанию на некоторых веб-серверах (общие хосты и т. Д.), Поэтому переносимость кода становится проблемой, если вам нужно перейти к одному из них.
Читаемость может быть проблемой для некоторых. Многие разработчики могут обнаружить, что
<?php
бросается в глаза как более очевидный маркер начала блока кода, чем<?
когда вы сканируете файл, особенно если вы застряли в кодовой базе с тесно переплетенными HTML и PHP.
Я прочитал эту страницу после поиска информации по этой теме и чувствую, что не была упомянута одна важная проблема: лень и последовательность. "Реальными" тегами для PHP являются Php и?>. Зачем? Мне действительно все равно. Почему вы хотите использовать что-то еще, если это явно для PHP? <% и%> означают для меня ASP, а С другой стороны, я согласен, что короткие теги в шаблонах (и ТОЛЬКО в шаблонах) кажутся полезными, но проблема в том, что мы просто потратили так много времени на обсуждение этого вопроса, что, скорее всего, потребуется очень много времени, чтобы на самом деле потратить впустую столько времени набирая лишние три символа "php"!! Хотя иметь много опций приятно, это совсем не логично и может вызвать проблемы. Представьте себе, если бы каждый язык программирования допускал 4 или более типов тегов: Javascript мог бы быть Наконец, я не думаю, что короткие теги являются проблемой здесь: есть только два логических типа блоков кода PHP - 1) обычный код PHP, 2) эхо-шаблоны. Что касается первого, я твердо верю, что только Php и?> Должно быть разрешено только для того, чтобы все было согласованно и переносимо. Для последнего метод =$ Var?> Выглядит ужасно. Почему так должно быть? Почему бы не добавить что-то более логичное?Это ничего не будет делать (и только в самых отдаленных возможностях оно может с чем-то конфликтовать), и это может легко заменить неловкий синтаксис =. Или, если это проблема, возможно, они могли бы вместо этого использовать Php=$var?> И не беспокоиться о несоответствиях. В тот момент, когда есть 4 опции для открывающих и закрывающих тегов и случайное добавление специального тега "echo", PHP также может иметь флаг "пользовательских открывающих / закрывающих тегов" в php.ini или.htaccess. Таким образом, дизайнеры могут выбрать тот, который им нравится больше всего. Но по понятным причинам это излишне. Так зачем разрешать 4+ варианта?
По состоянию на 2019 год я не согласен с некоторыми ответами здесь. Рекомендую использовать длинные теги
<?php /* code goes here */ ?>
или короткие эхо-теги
<?= /* code goes here */ ?>
Причина: они рекомендованы базовым стандартом кодирования PSR-1.
Другие короткие теги, такие как <? /* code goes here */ ?>
не рекомендуются.
В спецификации говорится:
Код PHP ДОЛЖЕН использовать длинные теги или теги short-echo; он НЕ ДОЛЖЕН использовать другие варианты тегов.
Хорошо использовать их, когда вы работаете с платформой MVC или CMS, которые имеют отдельные файлы представлений.
Это быстро, меньше кода, не смущает дизайнеров. Просто убедитесь, что конфигурация вашего сервера позволяет их использовать.
Я думал, что стоит упомянуть, что в PHP 7:
- Короткие ASP PHP теги
<% … %>
пропали - Короткие вкладки PHP
<? … ?>
все еще доступны, еслиshort_open_tag
установлен в true. Это по умолчанию. - Начиная с PHP 5.4, теги Short Print
<?=… ?>
всегда включены, независимо отshort_open_tag
установка.
Хорошее избавление от первого, так как оно мешает другим языкам.
Теперь нет никаких причин не использовать ярлыки для короткой печати, кроме личных предпочтений.
Конечно, если вы пишете код, совместимый с унаследованными версиями PHP 5, вам нужно будет придерживаться старых правил, но помните, что все, что до PHP 5.6, теперь не поддерживается.
Смотрите: https://secure.php.net/manual/en/language.basic-syntax.phptags.php
<?
по умолчанию отключено в новых версиях. Вы можете включить это, как описано в разделе "Включение коротких тегов в PHP".
Немного другая ситуация возникает при разработке приложения CodeIgniter. CodeIgniter, похоже, использует ярлыки всякий раз, когда PHP используется в шаблоне / представлении, в противном случае с моделями и контроллерами он всегда использует длинные теги. Это не жесткое и быстрое правило в фреймворке, но по большей части фреймворк и множество других источников следуют этому соглашению.
Мои два цента? Если вы никогда не планируете запускать код где-то еще, используйте его, если хотите. Я бы предпочел не делать масштабного поиска и замены, когда понял, что это глупая идея.
Давайте смотреть правде в глаза. PHP безобразно безобразен без коротких тегов.
Вы можете включить их в .htaccess
файл, если вы не можете добраться до php.ini
:
php_flag short_open_tag on
Чтобы избежать проблем с переносимостью, запускайте теги PHP с <?php
и в случае, если ваш файл PHP является чисто PHP, без HTML, вам не нужно использовать закрывающие теги.
ИМХО люди, которые используют короткие теги, часто забывают избегать того, что они повторяют. Было бы неплохо иметь шаблонизатор, который по умолчанию экранируется. Я полагаю, что Роб А быстро взломал ярлыки в приложениях Zend Frameworks. Если вам нравятся короткие теги, потому что это облегчает чтение PHP. Тогда Smarty может быть лучшим вариантом?
{$myString|escape}
для меня это выглядит лучше, чем
<?= htmlspecialchars($myString) ?>
Нужно спросить, в чем смысл использования коротких тегов.
Быстрее набрать
MDCore сказал:
<?=
гораздо удобнее, чем печатать<?php echo
Да, это. Вы экономите на необходимости вводить 7 символов * X раз по всем вашим сценариям.
Однако, когда сценарию требуется час, или 10 часов, или больше, чтобы спроектировать, разработать и написать, насколько уместно несколько секунд времени, когда эти 7 символов здесь и там не набирались в течение всего сценария?
По сравнению с тем, что некоторые или все ваши сценарии не работают, если короткие теги не включены или включены, но обновление или кто-то, изменяющий конфигурацию ini-файла / сервера, останавливает их работу, другие возможности.
Небольшая выгода, которую вы получаете, не приближается к перевешиванию серьезности потенциальных проблем: ваш сайт не работает, или, что еще хуже, только его части не работают и, следовательно, головная боль, которую нужно решить.
Легче читать
Это зависит от знакомства.
Я всегда видел и использовал <?php echo
, Так что пока <?=
это не трудно читать, это не знакомо мне и, следовательно, не легче читать.
И с разделением разработчиков переднего плана и внутреннего интерфейса (как в большинстве компаний) разработчик внешнего интерфейса, работающий над этими шаблонами, станет более знакомым, зная <?=
равнозначно "открытый тег PHP и эхо"?
Я бы сказал, что большинству будет удобнее с более логичным. То есть ясный открытый тег PHP, а затем то, что происходит "эхо" - <?php echo
,
Оценка риска
Issue = весь сайт или основные скрипты не работают;
Потенциал проблемы очень низок + серьезность результата очень высока = высокий риск
Заключение
Вы экономите несколько секунд здесь и там, и вам не нужно вводить несколько символов, но вы рискуете этим, а также, вероятно, теряете читабельность в результате.
Передние или задние кодеры знакомы с <?=
более склонны понимать <?php echo
, поскольку они стандартные вещи PHP - стандартные <?php
открытый тег и очень хорошо известное "эхо".
(Даже интерфейсные кодировщики должны знать "echo", или они просто не будут работать с любым кодом, обслуживаемым фреймворком).
В то время как обратное не так вероятно, кто-то вряд ли логично придет к выводу, что знак равенства в коротком теге PHP - "эхо".
Короткие метки всегда доступны в php. Так что вам не нужно повторять первое утверждение в вашем скрипте
пример:
$a =10;
<?= $a;//10
echo "Hellow";//
echo "Hellow";
?>
Внезапно вам нужно использовать для одного сценария PHP, а затем вы можете использовать его. пример:
<html>
<head>
<title></title>
</head>
<body>
<p>hellow everybody<?= hi;?></p>
<p>hellow everybody </p>
<p>hellow everybody </p>
</body>
</html>
- Короткие теги допустимы для использования в тех случаях, когда вы уверены, что сервер их поддержит и что ваши разработчики это поймут.
- Многие серверы не поддерживают его, и многие разработчики поймут это, увидев его один раз.
- Я использую полные теги для обеспечения мобильности, так как это действительно не так уж плохо.
С этим сказал, мой друг сказал это, в поддержку альтернативных стандартизированных тегов asp-стиля, таких как <%
скорее, чем <?
, который является настройкой в php.ini и называется asp_tags. Вот его рассуждение:
... произвольные соглашения должны быть стандартизированы. То есть каждый раз, когда мы сталкиваемся с набором возможностей, которые имеют одинаковую ценность - например, какие странные знаки препинания должны использоваться нашим языком программирования для разграничения себя - мы должны выбрать один стандартный путь и придерживаться его. Таким образом, мы уменьшаем кривую изучения всех языков (или того, к чему относится соглашение).
Звучит хорошо для меня, но я не думаю, что кто-либо из нас сможет обвести повозки вокруг этой причины. А пока я бы придерживался полного <?php
,
Перерабатывать <?
(без пробела) <?php
(с пробелом):
find . -name "*.php" -print0 | xargs -0 perl -pi -e 's/<\?(?!php|=|xml|mso| )/<\?php /g'
Перерабатывать <?
(с пробелом) в <?php
(сохраняя место в конце):
find . -name "*.php" -print0 | xargs -0 perl -pi -e 's/<\? /<\?php /g'
Если вы заботитесь о XSS, то вам следует использовать <?= htmlspecialchars(…) ?>
большую часть времени, поэтому короткий тег не имеет большого значения.
Даже если вы сократите echo htmlspecialchars()
в h()
Это все еще проблема, которую вы должны помнить, добавляя ее почти каждый раз (и пытаясь отследить, какие данные предварительно экранированы, а какие не спасены, но безвредны, только повышает вероятность ошибок).
Я использую шаблонизатор, который по умолчанию защищен и пишет <?php
теги для меня.
<?php ?>
гораздо лучше использовать, так как разработчики этого языка программирования массово обновили свой основной язык. Вы можете увидеть разницу между короткими и длинными тегами.
Короткие метки будут выделены как светло-красные, а более длинные выделены темнее!
Однако, повторяя что-то, например: <?=$variable;?>
Это хорошо. Но предпочитаю более длинные метки. <?php echo $variable;?>
В php доступны 3 тега:
- длинный тег, который
<?php ?>
нет необходимости указывать какие-либо настроенные - short_open_tag, что
<? ?>
доступно, если опция short_open_tag в php.ini включена - сократить тег
<?=
начиная с php 5.4.0 он всегда доступен
из php 7.0.0 asp и тег скрипта удалены
Нет, и PHP 6 постепенно выводит их из употребления, поэтому, если вы цените долговечность кода, просто не используйте их или <% ... %>
теги.