В чем разница между открытыми тегами PHP? - PullRequest
11 голосов
/ 11 июня 2010

Извините за глупый вопрос, но я наткнулся на код, который использовал:

<?=$MAP_OBJECT->printOnLoad();?>
<?=$MAP_OBJECT->printMap();?>
<?=$MAP_OBJECT->printSidebar();?>

Есть ли что-то особенное в <?= сверх <?php или просто <??

Ответы [ 8 ]

18 голосов
/ 11 июня 2010

Это сокращение от <?php echo .... ?>, известное как короткие теги .Вам следует избегать их использования, потому что:

  • Они, кажется, отключены на некоторых серверах
  • Они могут создать вам проблемы с точки зрения безопасности
  • Они могут создатьконфликт с инструкциями по обработке, такими как <?xml ... ?>

Поэтому вам никогда не следует использовать их снова, также обратите внимание на:

Короткий открытый тег PHP: удобный ярлык или короткое изменениеБезопасность

15 голосов
/ 12 июня 2010

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

Преимущества

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

Недостатки

Требуется специальная конфигурация

При использовании короткого открытиятеги, для которых требуется, чтобы short_open_tags был включен.Если вы или ваш веб-хостинг решите отключить short_open_tags , ваше приложение, вероятно, больше не будет работать, и у вас могут возникнуть серьезные проблемы с безопасностью.Поскольку, если short_open_tags отключен, распознаются только стандартные открывающие теги <?php, а все, что находится внутри коротких открывающих тегов, обрабатывается как обычный текст.(См. Также сообщение в блоге , на которое ссылается ответ Сарфраза Ахмеда.)

Это требование делает ваше PHP-приложение менее переносимым, если вы хотите писать приложения, предназначенные не только для вас.Именно поэтому многие рекомендуют не использовать короткие открытые теги (включая руководство по PHP):

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

Начиная с версии PHP 5.4 <?= всегда доступен, независимо от параметра short_open_tags.<?, с другой стороны, требует, чтобы опция была включена.

Конфликты с инструкциями обработки XML

Другая проблема связана с использованием инструкций обработки XML , таких как <?xml … ?>.Когда short_open_tags включен, вы не можете использовать их непосредственно в своем коде, но вам нужно использовать PHP для его вывода:

Если вы хотите использовать PHP в сочетании с XML, вы можете отключитьэта опция для использования <?xml ?> inline.В противном случае вы можете распечатать его с помощью PHP, например: <?php echo '<?xml version="1.0"?>'; ?>.

В противном случае PHP захлебнется xml в <?xml.

Теперь несколько последних слов оамортизация: В настоящее время short_open_tags не считается устаревшей.В противном случае в руководстве будет указано это явно.Кроме того, Расмус Лердорф, изобретатель PHP, написал в ответ на вопрос «Правда ли, что short_open_tag устарел в PHP 6?» Во внутреннем списке рассылки , что было несколько причин не удалять short_open_tags в PHP 6:

Именно поэтому мы решили не удалять их в PHP 6.

12 голосов
/ 22 мая 2012

<?= - это короткий тег, который в значительной степени эквивалентен:

<?php echo 

Начиная с PHP 5.4, этот синтаксис всегда доступен, но в более ранних версиях PHP для него требуется short_open_tag.,Что касается поиска в переполнении стека, попробуйте code:"<?=".

7 голосов
/ 11 июня 2010

Это сокращение от <?php echo $MAP_OBJECT->printOnLoad(); ?>.Более простой способ написать это, когда вы создаете шаблоны на основе PHP и все такое.

Будьте осторожны.Насколько я понимаю (хотя сам никогда не сталкивался с этим), сокращенная версия может быть отключена на некоторых серверах.

1 голос
/ 30 декабря 2017

Внутри короткого тега вы не можете написать так.

<?=
$number = "5";
$sum = 15 + "5";
?>

, потому что он будет печатать только первый вывод как 5.

Внутри открытого тега вы можете написать так.

<?php
 echo $number ="5";
echo $sum = 15+"5";
?>

Он напечатает как 5, так и 20

, это все о синтаксисе.

1 голос
/ 12 июня 2010

Просто чтобы исправить все эти ошибочные ответы:

короткие открытые теги не будут удалены или объявлены устаревшими.

1 голос
/ 11 июня 2010

<?= это не одно. Это на самом деле <?, а затем =. Как упомянул @derekerdmann, это не рекомендуемая конфигурация.

Дайте следующий взгляд:

0 голосов
/ 23 июня 2011

добавление из-за повторяющихся вопросов

aka shorttags - альтернативный тег для php, но работает только на тех серверах, на которых он включен.

Это позволяет вам писать эхо, как это

Однако не рекомендуется их использовать, и было предложено удалить или осудить их в php5.4 + вместе с глобальными регистрами реестра, безопасным режимом, магическими кавычками и т. Д.

Так что, хотя вы можете использовать их, они не рекомендуются. 1. Они не являются переносимыми, поскольку на серверах они должны быть включены. 2. Они могут легко привести к спагетти-коду, так как вы можете легко интегрировать HTML в ваш файл. 3. При смешивании их с объявлением xml необходимо использовать специальные методы

Однако они отлично подходят для создания шаблонов вместе с другими сокращенными обозначениями для циклов и условных проверок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...