допустимы ли короткие ярлыки php?

<p>вот информация <a href="http://www.php.net/manual/en/language.basic-syntax.php">согласно официальной документации</a> :</p><blockquote> <p>есть четыре разные пары открывающих и закрывающих тегов, которые можно использовать в php. два из них, <code><?php ?></code> и <code><script language="php"> </script></code>, всегда доступны. два других - это короткие теги и теги в стиле asp, которые можно включать и выключать из файла конфигурации php.ini. таким образом, хотя некоторые люди считают короткие теги и теги в стиле asp удобными, они менее переносимы и <strong> обычно не рекомендуются </strong>.</p> </blockquote><p>по моему опыту, на большинстве серверов <em> do </em> включены короткие теги. typing</p><pre><code><?= </code></pre><p>гораздо удобнее, чем печатать</p><pre><code><?php echo </code></pre><p>удобство программистов является важным фактором, поэтому <strong> почему </strong> они не рекомендуются?</p>

<p>они не рекомендуются, потому что это pita, если вам когда-либо нужно перенести код на сервер, где он не поддерживается (и вы не можете его включить). как вы говорите, многие общие хосты <em> поддерживают </em> шорттеги, но "лоты" - это еще не все. если вы хотите поделиться своими сценариями, лучше использовать полный синтаксис.</p><p>я согласен с тем, что <code><?</code> и <code><?=</code> проще для программистов, чем <code><?php</code> и <code><?php echo</code>, но можно выполнять массовый поиск и замену до тех пор, пока вы используете одну и ту же форму каждый раз (и не забрасывать пробелы (например, <code><? php</code> или <code><? =</code>)</p><p>я не покупаю читабельность в качестве причины вообще. у большинства серьезных разработчиков есть возможность подсветки синтаксиса.</p><p>как упоминает thiefmaster в комментариях, <strong> <a href="http://php.net/manual/en/migration54.new-features.php">по состоянию на php 5.4 теги <code><?= ... ?></code> поддерживаются везде, независимо от настроек ярлыков</a> </strong>. это должно означать, что они безопасны для использования в переносимом коде, но это означает, что существует зависимость от php 5.4+. если вы хотите поддерживать pre-5.4 и не можете гарантировать короткие ярлыки, вам все равно нужно использовать <code><?php echo ... ?></code>.</p><p>также вам необходимо знать, что <strong> <a href="http://php.net/manual/en/language.basic-syntax.phptags.php">теги asp <%,%>, <% = и тег сценария удалены из php 7</a> </strong>. поэтому, если вы хотите поддерживать долгосрочный переносимый код и хотите перейти на самые современные инструменты, рассмотрите возможность изменения этих частей кода.</p>

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

начиная с php 5.4, ярлык эха является отдельной проблемой от ярлыков, так как ярлык эхо всегда будет включен. теперь это факт:  <a href="http://svn.php.net/viewvc?view=revision&revision=311260">svn revision by rasmus lerdorf   <a href="http://marc.info/?t=123964298400001&r=1&w=2">обсуждение списка рассылки  таким образом, сам ярлык эха (<?=) теперь безопасен для использования.

проблема всего этого обсуждения заключается в использовании php в качестве языка шаблонов. никто не утверждает, что теги должны использоваться в исходных файлах приложения.однако встраиваемый синтаксис php позволяет использовать его как мощный язык шаблонов, и шаблоны должны быть максимально простыми и удобочитаемыми. многие считают, что проще использовать гораздо более медленный движок для создания шаблонов, такой как smarty, но для тех пуристов среди нас, которые требуют быстрого рендеринга и чистой базы кода, php - единственный способ написания шаблонов.единственный действительный аргумент против использования коротких тегов заключается в том, что они поддерживаются не на всех серверах. комментарии о конфликтах с xml-документами смешны, потому что вам, вероятно, не следует смешивать php и xml в любом случае; и если да, то вы должны использовать php для вывода строк текста. безопасность никогда не должна быть проблемой, потому что если вы помещаете конфиденциальную информацию, такую как учетные данные для доступа к базе данных, в файлы шаблонов, тогда у вас есть большие проблемы!теперь, что касается вопроса о поддержке серверов, по общему признанию нужно знать их целевую платформу. если общий хостинг является вероятной целью, следует избегать коротких тегов. но для многих профессиональных разработчиков (таких как я) клиент признает (и действительно зависит от факта), что мы будем диктовать требования к серверу. часто я сам отвечаю за настройку сервера.и мы никогда не работаем с хостинг-провайдером, который не дает нам абсолютного контроля над конфигурацией сервера - в таком случае мы могли бы рассчитывать на выполнение гораздо больших проблем, чем просто потеря поддержки коротких тегов. такого просто не бывает.так что да - я согласен, что использование коротких тегов должно быть тщательно взвешено. но я также твердо верю, что это всегда должно быть вариантом, и что разработчик, который знает о своей среде, должен свободно использовать их.

короткие теги возвращаются благодаря <a href="http://framework.zend.com/">zend framework , нажимающему " <a href="http://framework.zend.com/manual/en/zend.view.html#zend.view.introduction.view">php как язык шаблонов " в их <a href="http://framework.zend.com/manual/en/zend.controller.html#zend.controller.quickstart.go">конфигурация mvc по умолчанию . я не понимаю, о чем идет речь, большая часть программного обеспечения, которое вы будете производить в течение своей жизни, будет работать на сервере, который вы или ваша компания будете контролировать. пока вы сохраняете себя последовательным, не должно быть никаких проблем.<strong>обновить</strong>после проделанной работы с <a href="http://www.magentocommerce.com/">magento , которая использует длинную форму. в результате я перешел на длинную форму:<?php and <?php echo над<? and <?= похоже, небольшой объем работы для обеспечения взаимодействия.

потому что путаница может генерироваться с декларациями xml. многие люди <a href="http://michaelkimsal.com/blog/php-short-tags/">согласен <a href="http://bytes.com/forum/thread596.html">с вас, хотя.дополнительное беспокойство вызывает боль, которую он будет создавать, кодируя все с помощью коротких тегов, только чтобы в конце выяснить, что на конечном хост-сервере они отключены ...

следующее - замечательная схема потока того же самого:<img src="https://i.stack.imgur.com/tjpos.png" alt="decision making tree of the use of <?=">источник: <a href="https://softwareengineering.stackexchange.com/a/151694">похожий вопрос по стеку разработки программного обеспечения 

 <a href="http://uk3.php.net/manual/en/language.basic-syntax.phpmode.php">http://uk3.php.net/manual/en/language.basic-syntax.phpmode.php имеет множество советов, в том числе:<blockquote> в то время как некоторые люди находят короткие теги и теги в стиле asp удобными, они менее переносимы и, как правило, не рекомендуются. </blockquote>а также<blockquote> обратите внимание, что если вы встраиваете php в xml или xhtml, вам нужно будет использовать теги <?php ?>, чтобы соответствовать стандартам. </blockquote>а также<blockquote> следует избегать использования коротких тегов при разработке приложений или библиотек, предназначенных для перераспределения, или развертывания на php серверах, которые не находятся под вашим контролем, поскольку короткие ярлыки могут не поддерживаться на целевом сервере. для переносимого распространяемого кода не используйте короткие теги. </blockquote>

если кто-то еще обращает на это внимание ... по состоянию на php 5.4.0 alpha 1 <?= всегда доступен: <a href="http://php.net/releases/news_5_4_0_alpha1.txt">http://php.net/releases/news_5_4_0_alpha1.txt таким образом, похоже, что короткие теги (а) приемлемы и (б) здесь, чтобы остаться. пока, по крайней мере ...

  короткие теги не включены по умолчанию на некоторых веб-серверах (общие хосты и т.д.), поэтому <strong> переносимость кода </strong> становится проблемой, если вам нужно перейти на один из них. из этих.   <strong> читаемость </strong> может быть проблемой для некоторых. многие разработчики могут обнаружить, что <?php привлекает внимание как более очевидный маркер начала блока кода, чем <?, когда вы сканируете файл, особенно если вы застряли в кодовой базе с <a href="http://en.wikipedia.org/wiki/html">html и php тесно переплетены.  

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

немного другая ситуация возникает при разработке приложения <a href="http://en.wikipedia.org/wiki/codeigniter#codeigniter">codeigniter . codeigniter, похоже, использует ярлыки всякий раз, когда php используется в шаблоне/представлении, в противном случае с моделями и контроллерами он всегда использует длинные теги. это не жесткое и быстрое правило в фреймворке, но по большей части фреймворк и множество других источников следуют этому соглашению.мои два цента? если вы никогда не планируете запускать код где-то еще, используйте его, если хотите. я бы предпочел не делать массовый поиск и замену, когда понял, что это глупая идея.

<? по умолчанию отключен в новых версиях. вы можете включить это, как описано  <a href="http://www.tomjepson.co.uk/tutorials/35/enabling-short-tags-in-php.html">включение коротких тегов в php .

давайте смотреть правде в глаза. php безобразно безобразен без коротких тегов.вы можете включить их в файле .htaccess, если не можете получить код php.ini:php_flag short_open_tag on 

хорошо использовать их, когда вы работаете с платформой mvc или cms, у которых есть отдельные файлы представления. это быстро, меньше кода, не смущает дизайнеров. просто убедитесь, что конфигурация вашего сервера позволяет их использовать.

имхо люди, которые используют короткие теги, часто забывают избегать того, что они повторяют. было бы хорошо иметь шаблонизатор, который по умолчанию выходит из строя. я полагаю, что роб а быстро взломал ярлыки в приложениях zend frameworks. если вам нравятся короткие теги, потому что это облегчает чтение php. тогда smarty может быть лучшим вариантом?{$mystring|escape} </code></pre><p>для меня это выглядит лучше, чем</p><pre><code><?= htmlspecialchars($mystring) ?> 

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

нужно спросить, в чем смысл использования коротких тегов.<strong>быстрее набрать</strong>mdcore сказал:<blockquote> <?= гораздо удобнее, чем набирать <?php echo </blockquote>да, это. вы экономите на необходимости вводить 7 символов  x раз по всем вашим сценариям.однако, когда сценарию требуется час, или 10 часов, или больше, чтобы спроектировать, разработать и написать, насколько уместно несколько секунд времени, когда эти 7 символов здесь и там не набирались в течение всего сценария?по сравнению с тем, что некоторые из основных или всех из вас сценарии не работают, если короткие теги не включены или включены, но обновление или кто-то, изменяющий конфигурацию ini-файла/сервера, останавливает их работу, другие возможности.небольшая выгода, которую вы получаете, не приближается к перевешиванию серьезности потенциальных проблем: ваш сайт не работает или, что еще хуже, только его части не работают и, следовательно, головная боль, которую нужно решить.<strong>легче читать</strong>это зависит от  знакомства . я всегда видел и использовал <?php echo. поэтому, хотя <?= не сложно читать, он мне не знаком и, следовательно,  не легче читать .и при разделении внешнего/внутреннего разработчиков (как и в большинстве компаний) разработчик внешнего интерфейса, работающий над этими шаблонами, станет более  знакомым , зная, что <?= равен "php открытый тег и эхо"? я бы сказал, что большинству было бы удобнее с более логичным. то есть открытый тег php, а затем, что происходит, "echo" - <?php echo.<strong>оценка риска</strong> issue = весь сайт или основные скрипты не работают;потенциал проблемы  очень низкий  + серьезность результата  очень высокая  = <strong>высокий риск</strong><strong>вывод</strong>вы экономите несколько секунд здесь и там, и вам не нужно вводить несколько символов, но вы рискуете этим, а также, вероятно, теряете читабельность в результате.внешние или внутренние кодировщики , знакомые  с <?=, с большей вероятностью понимают <?php echo, поскольку они являются стандартными php вещами - стандартными <?php open тег и очень хорошо известный "эхо". (даже кодировщики внешнего интерфейса должны знать "echo", или они просто не будут работать с любым кодом, обслуживаемым фреймворком).в то время как обратное не так вероятно, кто-то не может логически вывести, что знак равенства на коротком теге php равен "echo".

 короткие теги допустимы для использования в тех случаях, когда вы уверены, что сервер их поддержит и что ваши разработчики это поймут. многие серверы не поддерживают его, и многие разработчики поймут это, увидев его один раз. я использую полные теги для обеспечения мобильности, так как это действительно не так уж плохо. сказав это, мой друг сказал это в поддержку альтернативных  стандартизированных  тегов в стиле asp, таких как <% вместо <?, что является параметром в php.ini называется asp_tags. вот его рассуждение:<blockquote> ... <strong>произвольные соглашения должны быть стандартизированы</strong>. то есть каждый раз, когда мы сталкиваемся с набором возможностей, которые имеют одинаковую ценность - например, какие странные знаки препинания должны использоваться нашим языком программирования для разграничения себя - мы должны выбрать один стандартный способ и придерживаться его. таким образом, мы уменьшаем кривую изучения всех языков (или того, к чему относится соглашение). </blockquote>звучит хорошо для меня, но я не думаю, что кто-либо из нас сможет обвести повозки вокруг этого дела. а пока я бы придерживался полного <?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' 

я подумал, что стоит упомянуть, что с php 7: короткие asp php теги <% … %> пропали короткие php вкладки <? … ?> по-прежнему доступны, если для short_open_tag установлено значение true. это по умолчанию. поскольку php 5.4, короткие <strong> теги печати </strong> <?=… ?>  всегда  включены, независимо от настройка short_open_tag. хорошее избавление от первого, так как оно мешает другим языкам.теперь нет никаких причин не использовать короткие ярлыки для печати, кроме личных предпочтений.конечно, если вы пишете код, совместимый с унаследованными версиями php 5, вам нужно будет придерживаться старых правил, но помните, что все, что было до php 5.6 сейчас не поддерживается.смотрите: <a href="https://secure.php.net/manual/en/language.basic-syntax.phptags.php">https://secure.php.net/manual/en/language.basic-syntax.phptags.php 

если вы заботитесь о <a href="http://en.wikipedia.org/wiki/cross-site_scripting">xss , то большую часть времени вам следует использовать <?= htmlspecialchars(…) ?>, поэтому короткий тег не имеет большого значения.даже если вы укоротите echo htmlspecialchars() до h(), вам все равно придется вспоминать о том, что вы добавляете его почти каждый раз (и попытка отследить, какие данные предварительно экранированы, а которые не спасены, но безвредны, повышает вероятность ошибок).я использую <a href="http://phptal.org">шаблонизатор , который по умолчанию безопасен и пишет для меня теги <?php.

<?php ?> гораздо лучше использовать, так как разработчики этого языка программирования значительно обновили свой основной язык. вы можете увидеть разницу между короткими и длинными тегами.короткие метки будут выделены как светло-красные, а более длинные выделены темнее!однако, повторяя что-то, например: <?=$variable;?></code> хорошо. но предпочитаю более длинные метки. <code><?php echo $variable;?>

короткие метки всегда доступны в php. так что вам не нужно повторять первое утверждение в вашем скриптепример: $a =10; <?= $a;//10 echo "hellow";// echo "hellow"; ?> </code></pre><p>внезапно вам нужно использовать для одного сценария php, а затем вы можете использовать его. пример:</p><pre><code><html> <head> <title></title> </head> <body> <p>hellow everybody<?= hi;?></p> <p>hellow everybody </p> <p>hellow everybody </p> </body> </html> </code></pre>