it-swarm.com.ru

Допустимы ли короткие ярлыки PHP?

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

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

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

<?=

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

<?php echo 

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

513
MDCore

Они не рекомендуются, потому что это PITA, если вам когда-либо нужно перенести код на сервер, где он не поддерживается (и вы не можете его включить). Как вы говорите, многие общие хосты поддерживают шорттеги, но "лоты" - это еще не все. Если вы хотите поделиться своими сценариями, лучше использовать полный синтаксис.

Я согласен с тем, что <? и <?= проще для программистов, чем <?php и <?php echo, но можно выполнять массовый поиск и замену до тех пор, пока вы используете одну и ту же форму каждый раз (и не забрасывать пробелы (например, <? php или <? =)

Я не покупаю читабельность в качестве причины вообще. У большинства серьезных разработчиков есть возможность подсветки синтаксиса.

Как упоминает ThiefMaster в комментариях, по состоянию на PHP 5.4 теги <?= ... ?> поддерживаются везде, независимо от настроек ярлыков. Это должно означать, что они безопасны для использования в переносимом коде, но это означает, что существует зависимость от PHP 5.4+. Если вы хотите поддерживать pre-5.4 и не можете гарантировать короткие ярлыки, вам все равно нужно использовать <?php echo ... ?>.

Также вам необходимо знать, что теги ASP <%,%>, <% = и тег сценария удалены из PHP 7. Поэтому, если вы хотите поддерживать долгосрочный переносимый код и хотите перейти на самые современные инструменты, рассмотрите возможность изменения этих частей кода.

367
Oli

Я слишком люблю <?=$whatever?>, чтобы отпустить. Никогда не было проблем с этим. Я подожду, пока он не укусит меня в задницу. Серьезно, 85% (моих) клиентов имеют доступ к php.ini в редких случаях, когда они выключены. Остальные 15% пользуются услугами хостинг-провайдеров, и практически у всех они включены. Я люблю их.

171
Paolo Bergantino

Начиная с PHP 5.4, ярлык эха является отдельной проблемой от ярлыков, так как ярлык эхо всегда будет включен. Теперь это факт:

Таким образом, сам ярлык эха (<?=) теперь безопасен для использования.

140
dukeofgaming

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

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

Единственный действительный аргумент против использования коротких тегов заключается в том, что они поддерживаются не на всех серверах. Комментарии о конфликтах с XML-документами смешны, потому что вам, вероятно, не следует смешивать PHP и ​​XML в любом случае; и если да, то вы должны использовать PHP для вывода строк текста. Безопасность никогда не должна быть проблемой, потому что если вы помещаете конфиденциальную информацию, такую ​​как учетные данные для доступа к базе данных, в файлы шаблонов, тогда у вас есть большие проблемы!

Теперь, что касается вопроса о поддержке серверов, по общему признанию нужно знать их целевую платформу. Если общий хостинг является вероятной целью, следует избегать коротких тегов. Но для многих профессиональных разработчиков (таких как я) клиент признает (и действительно зависит от факта), что мы будем диктовать требования к серверу. Часто я сам отвечаю за настройку сервера.

И мы НИКОГДА не работаем с хостинг-провайдером, который не дает нам абсолютного контроля над конфигурацией сервера - в таком случае мы могли бы рассчитывать на выполнение гораздо больших проблем, чем просто потеря поддержки коротких тегов. Такого просто не бывает.

Так что да - я согласен, что использование коротких тегов должно быть тщательно взвешено. Но я также твердо верю, что это ВСЕГДА должно быть вариантом, и что разработчик, который знает о своей среде, должен свободно использовать их.

80
Brian Lacy

Короткие теги возвращаются благодаря Zend Framework , нажимающему " PHP как язык шаблонов " в их конфигурация MVC по умолчанию . Я не понимаю, о чем идет речь, большая часть программного обеспечения, которое вы будете производить в течение своей жизни, будет работать на сервере, который вы или ваша компания будете контролировать. Пока вы сохраняете себя последовательным, не должно быть никаких проблем.

ОБНОВИТЬ

После проделанной работы с Magento , которая использует длинную форму. В результате я перешел на длинную форму:

<?php and <?php echo

над

<? and <?=

Похоже, небольшой объем работы для обеспечения взаимодействия.

33
Jake McGraw

Потому что путаница может генерироваться с декларациями XML. Многие люди согласенс вас, хотя.

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

20
Vinko Vrsalovic

Следующее - замечательная схема потока того же самого:

decision making tree of the use of <?=

Источник: похожий вопрос по стеку разработки программного обеспечения

19
Sumoanand

http://uk3.php.net/manual/en/language.basic-syntax.phpmode.php имеет множество советов, в том числе:

в то время как некоторые люди находят короткие теги и теги в стиле ASP удобными, они менее переносимы и, как правило, не рекомендуются.

а также

обратите внимание, что если вы встраиваете PHP в XML или XHTML, вам нужно будет использовать теги <?php ?>, чтобы соответствовать стандартам.

а также

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

13
Oliver Charlesworth

Если кто-то еще обращает на это внимание ... По состоянию на PHP 5.4.0 Alpha 1 <?= всегда доступен:

http://php.net/releases/NEWS_5_4_0_alpha1.txt

Таким образом, похоже, что короткие теги (а) приемлемы и (б) здесь, чтобы остаться. Пока, по крайней мере ...

13
James Alday
  • Короткие теги не включены по умолчанию на некоторых веб-серверах (общие хосты и т.д.), Поэтому переносимость кода становится проблемой, если вам нужно перейти на один из них. из этих.

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

12
ConroyP

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

10
brunoais

Я прочитал эту страницу после поиска информации по этой теме и чувствую, что одна из главных проблем не была упомянута: лень и последовательность. "Настоящими" тегами для PHP являются <? Php и?>. Зачем? Мне все равно. Почему вы хотите использовать что-то еще, если это явно для PHP? <% и%> значат для меня ASP, а <script ..... означает Javascript (в большинстве случаев). Так что для последовательности, быстрого обучения, мобильности и простоты, почему бы не придерживаться стандарта?

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

Хотя иметь много опций - это хорошо, это совсем не логично и может вызвать проблемы. Представьте себе, если бы каждый язык программирования допускал 4 или более типов тегов: Javascript мог бы быть <JS или <script .... или <% или <? JS .... это было бы полезно? В случае PHP порядок синтаксического анализа, как правило, способствует разрешению этих вещей, но во многих других отношениях язык не гибкий: он выдает уведомления или ошибки при малейшем несоответствии, но используются короткие теги довольно часто. И когда короткие ярлыки используются на сервере, который их не поддерживает, может потребоваться очень много времени, чтобы выяснить, что не так, поскольку в некоторых случаях ошибки не выдается.

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

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

5
Daniel Ross

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

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

3
patricksweeney

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

3
AnkTech Devops

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

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

php_flag short_open_tag on
3
Jimmer

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

3
Greg

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

{$myString|escape}

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

<?= htmlspecialchars($myString) ?> 
2
Adrian Judd

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

2
Kumar

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

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

MDCore сказал:

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

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

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

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

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

легче читать

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

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

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

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

Вывод

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

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

В то время как обратное не так вероятно, кто-то не может логически вывести, что знак равенства на коротком теге PHP равен "echo".

2
James
  • Короткие теги допустимы для использования в тех случаях, когда вы уверены, что сервер их поддержит и что ваши разработчики это поймут.
  • Многие серверы не поддерживают его, и многие разработчики поймут это, увидев его один раз.
  • Я использую полные теги для обеспечения мобильности, так как это действительно не так уж плохо.

Сказав это, мой друг сказал это в поддержку альтернативных стандартизированных тегов в стиле asp, таких как <% вместо <?, что является параметром в php.ini называется asp_tags. Вот его рассуждение:

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

Звучит хорошо для меня, но я не думаю, что кто-либо из нас сможет обвести повозки вокруг этого дела. А пока я бы придерживался полного <?php.

1
stereoscott

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

Я подумал, что стоит упомянуть, что с PHP 7:

  • Короткие ASP PHP теги <% … %> пропали
  • Короткие PHP вкладки <? … ?> по-прежнему доступны, если для short_open_tag установлено значение true. Это по умолчанию.
  • Поскольку PHP 5.4, короткие теги печати <?=… ?> всегда включены, независимо от настройка short_open_tag.

Хорошее избавление от первого, так как оно мешает другим языкам.

Теперь нет никаких причин не использовать короткие ярлыки для печати, кроме личных предпочтений.

Конечно, если вы пишете код, совместимый с унаследованными версиями PHP 5, вам нужно будет придерживаться старых правил, но помните, что все, что было до PHP 5.6 сейчас не поддерживается.

Смотрите: https://secure.php.net/manual/en/language.basic-syntax.phptags.php

1
Manngo

Если вы заботитесь о XSS , то большую часть времени вам следует использовать <?= htmlspecialchars(…) ?>, поэтому короткий тег не имеет большого значения.

Даже если вы укоротите echo htmlspecialchars() до h(), вам все равно придется вспоминать о том, что вы добавляете его почти каждый раз (и попытка отследить, какие данные предварительно экранированы, а которые не спасены, но безвредны, повышает вероятность ошибок).

Я использую шаблонизатор , который по умолчанию безопасен и пишет для меня теги <?php.

0
Kornel

<?php ?> гораздо лучше использовать, так как разработчики этого языка программирования значительно обновили свой основной язык. Вы можете увидеть разницу между короткими и длинными тегами.

Короткие метки будут выделены как светло-красные, а более длинные выделены темнее!

Однако, повторяя что-то, например: <?=$variable;?> хорошо. Но предпочитаю более длинные метки. <?php echo $variable;?>

0
M50Scripts

Короткие метки всегда доступны в 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>
0
GaziAnis