Являются ли короткие теги PHP приемлемыми для использования? - PullRequest
513 голосов
/ 14 октября 2008

Вот информация согласно официальной документации :

Есть четыре разные пары открывающие и закрывающие теги, которые могут быть используется в PHP. Два из них, <?php ?> и <script language="php"> </script>, всегда доступны. Другие два короткие теги и теги стиля ASP, и может быть включен и выключен из Конфигурационный файл php.ini. В качестве таких, в то время как некоторые люди находят короткие метки и Теги в стиле ASP удобны, они менее портативный, и обычно нет рекомендуемое .

По моему опыту, на большинстве серверов do включены короткие теги. Typing

<?=

гораздо удобнее, чем набирать

<?php echo 

Удобство программистов является важным фактором, поэтому почему они не рекомендуются?

Ответы [ 26 ]

10 голосов
/ 30 мая 2012

Примечание. Начиная с версии PHP 5.4, короткий тег <?= теперь всегда доступен.

5 голосов
/ 09 июля 2010

Я прочитал эту страницу после поиска информации по этой теме и чувствую, что одна из главных проблем не была упомянута: лень против последовательности. «Реальными» тегами для PHP являются <? Php и?>. Зачем? Мне все равно. Почему вы хотите использовать что-то еще, если это явно для PHP? <% и%> означают для меня ASP, а

С другой стороны, я согласен, что короткие теги в шаблонах (и ТОЛЬКО в шаблонах) кажутся полезными, но проблема в том, что мы просто потратили столько времени на обсуждение этого вопроса, что, вероятно, потребуется очень много времени, чтобы на самом деле потратили столько времени, набирая лишние три символа "php" !!

Хотя иметь много опций приятно, это совсем не логично и может вызвать проблемы. Представьте себе, если бы каждый язык программирования допускал 4 или более типов тегов: Javascript мог бы быть

Наконец, я не думаю, что короткие теги являются проблемой здесь: есть только два логических типа блоков кода PHP - 1) обычный код PHP, 2) эхо-шаблоны. Для первого я твердо верю, что только <? Php и?> Должно быть разрешено только для того, чтобы все было согласованно и переносимо. Для последнего метод <? = $ Var?> Выглядит ужасно. Почему так должно быть? Почему бы не добавить что-то более логичное? <? php $ var?> Это ничего не будет делать (и только в самых отдаленных возможностях это может конфликтовать с чем-то), и это может легко заменить неловкий синтаксис <? =. Или, если это проблема, возможно, вместо этого они могли бы использовать <? Php = $ var?> И не беспокоиться о несоответствиях.

В тот момент, когда есть 4 опции для открывающих и закрывающих тегов и случайное добавление специального тега «echo», PHP может также иметь флаг «пользовательских открывающих / закрывающих тегов» в php.ini или .htaccess. Таким образом, дизайнеры могут выбрать тот, который им нравится больше всего. Но по понятным причинам это излишне. Так зачем разрешать 4+ варианта?

3 голосов
/ 07 ноября 2012

Хорошо использовать их, когда вы работаете с платформой MVC или CMS, у которой есть отдельные файлы представлений.
Это быстро, меньше кода, не смущая дизайнеров. Просто убедитесь, что конфигурация вашего сервера позволяет их использовать.

3 голосов
/ 15 октября 2008

Немного другая ситуация возникает при разработке приложения CodeIgniter . CodeIgniter, кажется, использует короткие ярлыки всякий раз, когда PHP используется в шаблоне / представлении, в противном случае с моделями и контроллерами он всегда использует длинные теги. Это не жесткое и быстрое правило в фреймворке, но по большей части фреймворк и множество других источников следуют этому соглашению.

Мои два цента? Если вы никогда не планируете запускать код где-то еще, используйте его, если хотите. Я бы предпочел не делать масштабного поиска и замены, когда понял, что это глупая идея.

3 голосов
/ 08 ноября 2009

Посмотрим правде в глаза. PHP безобразно безобразен без коротких тегов.

Вы можете включить их в файле .htaccess, если не можете добраться до php.ini:

php_flag short_open_tag on
3 голосов
/ 20 апреля 2012

<? по умолчанию отключено в новых версиях. Вы можете включить это, как описано Включение коротких тегов в PHP .

2 голосов
/ 13 апреля 2011

ИМХО люди, которые используют короткие теги, часто забывают избегать того, что они повторяют. Было бы неплохо иметь шаблонизатор, который по умолчанию экранируется. Я полагаю, что Роб А быстро взломал ярлыки в приложениях Zend Frameworks. Если вам нравятся короткие теги, потому что это облегчает чтение PHP. Тогда может ли Smarty быть лучшим вариантом?

{$myString|escape}

для меня это выглядит лучше, чем

<?= htmlspecialchars($myString) ?> 
2 голосов
/ 30 мая 2011

Чтобы избежать проблем с переносимостью, начинайте теги PHP с <?php, и в случае, если ваш PHP-файл является чисто PHP, без HTML, вам не нужно использовать закрывающие теги.

2 голосов
/ 09 марта 2014

Нужно спросить, в чем смысл использования коротких тегов.

Быстрее набрать

MDCore сказал:

<?= гораздо удобнее, чем набирать <?php echo

Да, это так. Вы экономите на необходимости вводить 7 символов * X раз по всем вашим сценариям.

Однако, когда сценарию требуется час, или 10 часов, или больше, чтобы спроектировать, разработать и написать, насколько уместно то, что несколько секунд времени не набирают эти 7 символов здесь и там в течение действия сценария?

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

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

Легче читать

Это зависит от фамильярности .
Я всегда видел и использовал <?php echo. Таким образом, хотя <?= не трудно читать, оно мне не знакомо и, следовательно, не легче читать .

И при разделении внешнего / внутреннего разработчиков (как и в большинстве компаний) разработчик внешнего интерфейса, работающий с этими шаблонами, будет более знакомым , зная, что <?= равно "PHP open tag and echo"
Я бы сказал, что большинству будет удобнее с более логичным. То есть понятный открытый тег PHP и то, что происходит "эхо" - <?php echo.

Оценка риска
Проблема = весь сайт или основные сценарии не работают;

Потенциал проблемы очень низкий + серьезность исхода очень высокий = высокий риск

Заключение

Вы экономите несколько секунд здесь и там, не прибегая к вводу нескольких символов, но рискуете этим, а также в результате теряете читабельность.

Передний или задний конечные кодеры знакомые с <?= с большей вероятностью поймут <?php echo, поскольку они являются стандартными PHP-вещами - стандартным <?php открытым тегом и очень известным "эхо".
(Даже интерфейсные кодировщики должны знать «echo», или они просто не будут работать с любым кодом, обслуживаемым фреймворком).

Тогда как обратное не так вероятно, кто-то вряд ли логически определит, что знак равенства на коротком теге PHP - "эхо".

1 голос
/ 29 ноября 2015

Преобразовать <? (без завершающего пробела) в <?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'
...