Вот информация согласно официальной документации :
В PHP можно использовать четыре разные пары открывающих и закрывающих тегов. Два из них,
<?php ?>
и<script language="php"> </script>
, всегда доступны. Два других - это короткие теги и теги в стиле ASP, которые можно включать и выключать из файла конфигурации php.ini. Таким образом, хотя некоторые люди считают короткие теги и теги стиля ASP удобными, они менее переносимы и, как правило, не рекомендуются .
По моему опыту большинства серверов действительно включены короткие теги. Typing
<?=
гораздо удобнее, чем печатать
<?php echo
Удобство программистов является важным фактором, так почему они не рекомендуются?
php
coding-style
php-shorttags
MDCore
источник
источник
why
, я бы процитировал руководство по сертификации Zend PHP 5: «Короткие теги были некоторое время стандартом в мире PHP, однако они имеют главный недостаток - конфликтовать с заголовками XML и, следовательно, имеют упал на обочине ".<?= $example;?>
! Это очень важно, так как использование всех других коротких тегов считается бесполезным. В любом случае, использование короткого тега эха теперь приветствуется. Это обеспечивает более гладкую и аккуратную кодовую базу - esp. в просмотр файлов. Так что для PHP> = 5.4.0<?= ?>
можно использовать без настройкиshort_open_tag
. Пожалуйста, не используйте другие короткие теги в вашем коде. Код-Боги очень злятся, когда ты так делаешь ...<?
не только используется в XML для начального<?xml version="1.0" ?>
объявления; это общий синтаксис «инструкций по обработке», второй по распространенности пример<?xml-stylesheet ... ?>
.<?php
на самом деле может считаться допустимой инструкцией обработки, как может<?=
(как это разрешено в 5.4+), но утверждение всего этого<?
также создает ненужный конфликт между синтаксисами.Ответы:
Они не рекомендуются, потому что это PITA, если вам когда-либо нужно перенести код на сервер, где он не поддерживается (и вы не можете его включить). Как вы говорите, много общих хозяев сделать поддержку shorttags но «много» не все из них. Если вы хотите поделиться своими сценариями, лучше использовать полный синтаксис.
Я согласен с тем, что программистам легче
<?
и<?=
легче, чем<?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, ярлык эха является отдельной проблемой от ярлыков, так как ярлык эха всегда будет включен. Теперь это факт:
Таким образом, сам ярлык echo (
<?=
) теперь безопасен для использования.источник
<?php
может быть использован в начале всех файлов классов, а затем у вас есть<?=
для ваших представлений. обоюдный выигрыш.So the echo shortcut itself (<?=) is safe to use
... до тех пор, пока вам удобно, требуется PHP 5.4. Широко распространенные приложения PHP (такие как wordpress) не могут позволить себе роскошь требовать 5.4, и даже продолжают предлагать поддержку PHP 4 вплоть до 2011 года - целых 7 лет после выхода PHP 5. Если вы находитесь в таком месте, как Facebook, где все установки вашего программного обеспечения напрямую управляются самой компанией, то требовать поддержки 5.4 намного проще, чем если вы работаете над проектом, подобным WordPress.Проблема всей этой дискуссии заключается в использовании PHP в качестве языка шаблонов. Никто не утверждает, что теги должны использоваться в исходных файлах приложения.
Однако встраиваемый синтаксис PHP позволяет использовать его как мощный язык шаблонов, и шаблоны должны быть максимально простыми и удобочитаемыми. Многие считают, что проще использовать гораздо более медленный движок для создания шаблонов, такой как Smarty, но для тех пуристов среди нас, которым требуется быстрый рендеринг и чистая кодовая база, PHP является единственным способом написания шаблонов.
Единственный действительный аргумент против использования коротких тегов заключается в том, что они поддерживаются не на всех серверах. Комментарии о конфликтах с XML-документами смешны, потому что, вероятно, вам все равно не следует смешивать PHP и XML; и если да, то вы должны использовать PHP для вывода строк текста. Безопасность никогда не должна быть проблемой, потому что если вы помещаете конфиденциальную информацию, такую как учетные данные для доступа к базе данных, в файлы шаблонов, тогда у вас есть большие проблемы!
Теперь, что касается вопроса о поддержке серверов, по общему признанию нужно знать их целевую платформу. Если общий хостинг является вероятной целью, следует избегать коротких тегов. Но для многих профессиональных разработчиков (таких как я) клиент признает (и действительно зависит от факта), что мы будем диктовать требования к серверу. Часто я сам отвечаю за настройку сервера.
И мы НИКОГДА не работаем с хостинг-провайдером, который не дает нам абсолютного контроля над конфигурацией сервера - в таком случае мы могли бы рассчитывать на выполнение гораздо больших проблем, чем просто потеря поддержки коротких тегов. Такого просто не бывает.
Так что да - я согласен, что использование коротких тегов должно быть тщательно взвешено. Но я также твердо верю, что это ВСЕГДА должно быть вариантом, и что разработчик, который знает о своей среде, должен свободно использовать их.
источник
<?
в качестве короткого тега, потому что это приводит к уродливым обходным путям в XML. Тем не менее, я согласен, что это вопрос взвешивания выгод и недостатков, и что, если вы знаете, что делаете, вы, безусловно, можете это сделать. Но это не делает<?
хороший выбор.Короткие теги возвращаются благодаря Zend Framework, выдвигающему « PHP как язык шаблонов » в конфигурации MVC по умолчанию . Я не понимаю, о чем идет речь, большая часть программного обеспечения, которое вы будете производить в течение своей жизни, будет работать на сервере, который вы или ваша компания будете контролировать. Пока вы сохраняете себя последовательным, не должно быть никаких проблем.
ОБНОВИТЬ
После довольно большой работы с Magento , который использует длинную форму. В результате я перешел на длинную форму:
над
Похоже, небольшой объем работы для обеспечения взаимодействия.
источник
Потому что путаница может генерироваться с декларациями XML. Хотя многие с вами согласны .
Дополнительное беспокойство вызывает боль, которую он будет создавать, кодируя все с помощью коротких тегов, только чтобы в конце выяснить, что на конечном хост-сервере они отключены ...
источник
<?='<?xml'
) или сказать «вы не должны этого делать», но это не делает факт того, что это может произойти, исчезает.<?=
на<? echo
. многие текстовые редакторы могут легко справиться с этим одновременно с тысячами файлов.Следующее - замечательная схема потока того же самого:
Источник: похожий вопрос о разработке программного обеспечения стека обмена
источник
<?
короткими тегами, упомянутыми в вопросе (хотя он использовал те же настройки конфигурации до 5.4)http://uk3.php.net/manual/en/language.basic-syntax.phpmode.php имеет множество советов, в том числе:
а также
а также
источник
Если кто-то еще обращает на это внимание ... Начиная с PHP 5.4.0 Alpha 1
<?=
всегда доступна:http://php.net/releases/NEWS_5_4_0_alpha1.txt
Таким образом, похоже, что короткие теги (а) приемлемы и (б) здесь, чтобы остаться. Пока, по крайней мере ...
источник
<?=
не считается коротким тегом с 5.4Короткие теги не включены по умолчанию на некоторых веб-серверах (общие хосты и т. Д.), Поэтому переносимость кода становится проблемой, если вам нужно перейти к одному из них.
Читаемость может быть проблемой для некоторых. Многие разработчики могут обнаружить, что это
<?php
бросается в глаза как более очевидный маркер начала блока кода, чем<?
при сканировании файла, особенно если вы застряли в кодовой базе с тесно переплетенными HTML и PHP.источник
<?= $var ?>
его гораздо удобнее читать<?php echo $var ?>
<?
против<?php
.Примечание. Начиная с версии PHP 5.4, короткий тег
<?=
теперь доступен всегда.источник
Я прочитал эту страницу после поиска информации по этой теме и чувствую, что одна из главных проблем не была упомянута: лень и последовательность. «Реальными» тегами для 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+ варианта?
источник
Хорошо использовать их, когда вы работаете с платформой MVC или CMS, у которых есть отдельные файлы представления.
Это быстро, меньше кода, не смущает дизайнеров. Просто убедитесь, что конфигурация вашего сервера позволяет их использовать.
источник
Немного другая ситуация возникает при разработке приложения CodeIgniter . CodeIgniter, кажется, использует короткие ярлыки всякий раз, когда PHP используется в шаблоне / представлении, в противном случае с моделями и контроллерами он всегда использует длинные теги. Это не жесткое и быстрое правило в фреймворке, но по большей части фреймворк и множество других источников следуют этому соглашению.
Мои два цента? Если вы никогда не планируете запускать код где-то еще, используйте его, если хотите. Я бы предпочел не делать массовый поиск и замену, когда понял, что это глупая идея.
источник
<?
по умолчанию отключено в новых версиях. Вы можете включить это, как описано в разделе «Включение коротких тегов в PHP» .источник
ИМХО люди, которые используют короткие теги, часто забывают избегать того, что они повторяют. Было бы неплохо иметь шаблонизатор, который по умолчанию экранируется. Я полагаю, что Роб А быстро взломал ярлыки в приложениях Zend Frameworks. Если вам нравятся короткие теги, потому что это облегчает чтение PHP. Тогда Smarty может быть лучшим вариантом?
для меня это выглядит лучше, чем
источник
Нужно спросить, в чем смысл использования коротких тегов.
Быстрее набрать
MDCore сказал:
Да, это так. Вы экономите на необходимости вводить 7 символов * X раз по всем вашим сценариям.
Однако, когда сценарию требуется час, или 10 часов, или больше, чтобы спроектировать, разработать и написать, насколько уместны те несколько секунд времени, когда эти 7 символов не вводятся здесь и там в течение всего сценария?
По сравнению с тем, что некоторые или все ваши сценарии не работают, если короткие теги не включены или включены, но обновление или кто-то, изменяющий конфигурацию ini-файла / сервера, останавливает их работу, другие возможности.
Небольшая выгода, которую вы получаете, не приближается к перевешиванию серьезности потенциальных проблем: ваш сайт не работает или, что еще хуже, только его части не работают и, следовательно, головная боль, которую нужно решить.
Легче читать
Это зависит от знакомства .
Я всегда видел и использовал
<?php echo
. Таким образом, хотя<?=
это не трудно читать, это не знакомо мне и, следовательно, не легче читать .И с разделением разработчиков переднего плана и внутреннего интерфейса (как и в большинстве компаний) разработчик внешнего интерфейса, работающий над этими шаблонами, будет более знаком, зная, что
<?=
это «открытый тег PHP и эхо»?Я бы сказал, что большинству будет удобнее с более логичным. То есть понятный открытый тег PHP и то, что происходит "эхо" -
<?php echo
.Оценка риска
Проблема = весь сайт или основные скрипты не работают;
Потенциал проблемы очень низкий + серьезность результата очень высока = высокий риск
Вывод
Вы экономите несколько секунд здесь и там, и вам не нужно вводить несколько символов, но вы рискуете этим, а также, вероятно, теряете читабельность.
Фронтальные или бэкэнд-кодеры, с которыми вы знакомы, с
<?=
большей вероятностью поймут<?php echo
, поскольку они являются стандартными вещами PHP - стандартным<?php
открытым тегом и очень хорошо известным «эхо».(Даже интерфейсные кодировщики должны знать «echo», или они просто не будут работать с любым кодом, обслуживаемым фреймворком).
В то время как обратное не так вероятно, кто-то не может логически сделать вывод, что знак равенства в коротком теге PHP - «эхо».
источник
<?=
будет читать<?=
легче, чем человек, привыкший<?php echo
читать<?php echo
.<?php
видеть, что во всем коде мне много раз знакомо больше, чем<?=
- знакомство делает вещи проще - хотя не обязательно лучше.<?=
будет читать<?=
лучше, чем человек, привыкший<?php echo
читать<?php echo
. Это означает, что если у нас есть две идентичные копии человека X, и изменять их только в том аспекте, при котором одна используется для чтения<?=
, а другая - для чтения<?php echo
, первая копия может достичь значения читабельностиx
при чтении с использованием его желаемого синтаксиса, в то время как вторая копия может достичь значения читабельностиy
при чтении желаемого синтаксиса, гдеx >= y
.Давайте смотреть правде в глаза. PHP безобразно безобразен без коротких тегов.
Вы можете включить их в
.htaccess
файл, если не можете добраться доphp.ini
:источник
Чтобы избежать проблем с переносимостью, начинайте использовать теги PHP,
<?php
а в случае, если ваш файл PHP полностью PHP, без HTML, вам не нужно использовать закрывающие теги.источник
С учетом сказанного мой друг сказал это в поддержку альтернативных стандартизированных тегов asp-style, например,
<%
вместо.<?
Это параметр в php.ini, называемый asp_tags. Вот его рассуждение:Звучит хорошо для меня, но я не думаю, что кто-либо из нас сможет обвести повозки вокруг этого дела. А пока я бы придерживался в полной мере
<?php
.источник
Я думал, что стоит упомянуть, что в PHP 7:
<% … %>
исчезли<? … ?>
по-прежнему доступны, еслиshort_open_tag
установлено значение true. Это по умолчанию.<?=… ?>
будут всегда включены, независимо отshort_open_tag
настройки.Хорошее избавление от первого, так как оно мешает другим языкам.
Теперь нет никаких причин не использовать короткие ярлыки для печати, кроме личных предпочтений.
Конечно, если вы пишете код для совместимости с унаследованными версиями PHP 5, вам нужно будет придерживаться старых правил, но помните, что все, что до PHP 5.6, теперь не поддерживается.
Смотрите: https://secure.php.net/manual/en/language.basic-syntax.phptags.php
источник
Если вам небезразличен XSS, вам следует использовать
<?= htmlspecialchars(…) ?>
большую часть времени, поэтому короткий тег не имеет большого значения.Даже если вы сократили
echo htmlspecialchars()
доh()
, это все еще проблема, которую вы должны помнить, чтобы добавлять его почти каждый раз (и попытка отследить, какие данные предварительно экранированы, а какие не спасены, но безвредны, только повышает вероятность ошибок).Я использую шаблонизатор, который по умолчанию безопасен и пишет
<?php
для меня теги.источник
<?php ?>
гораздо лучше использовать, так как разработчики этого языка программирования массово обновили свой основной язык. Вы можете увидеть разницу между короткими и длинными тегами.Короткие метки будут выделены как светло-красные, а более длинные выделены темнее!
Однако, повторение чего-то, например:
<?=$variable;?>
хорошо. Но предпочитайте более длинные теги.<?php echo $variable;?>
источник
Преобразовать
<?
(без завершающего пробела) в<?php
(с завершающим пробелом):Преобразовать
<?
(с завершающим пробелом) в<?php
(сохраняя завершающий пробел):источник
Короткие метки всегда доступны в php. Так что вам не нужно повторять первое утверждение в вашем скрипте
пример:
Внезапно вам нужно использовать для одного сценария PHP, а затем вы можете использовать его. пример:
источник
С 2019 года я не согласен с некоторыми ответами здесь. Я рекомендую использовать длинные теги
или короткие эхо-метки
Причина: они рекомендованы базовым стандартом кодирования PSR-1.
Другие короткие теги, такие
<? /* code goes here */ ?>
как не рекомендуется.В спецификации сказано:
источник
3 тега доступны в php:
<?php ?>
не требует директивы для любого настроенного<? ?>
доступен, если включена опция short_open_tag в php.ini<?=
с php 5.4.0 он всегда доступениз php 7.0.0 убраны asp и скрипт
источник
Нет, в PHP 6 они постепенно сокращаются, поэтому, если вы цените долговечность кода, просто не используйте их или
<% ... %>
теги.источник