Каково различие между PHP открытые теги “<? =” и “<? php” / “<?”?

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

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

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

11
задан Gumbo 22 December 2010 в 16:30
поделиться

5 ответов

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

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

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

Недостатки

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

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

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

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

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

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

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

Если вы хотите использовать PHP в сочетании с XML, вы можете отключить эту опцию, чтобы использовать встроенный. В противном случае вы можете распечатать его с помощью PHP, например: '; ?> .

В противном случае PHP подавится на xml в .

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

Это одна из причин, по которой мы решили не удалять их в PHP 6.

15
ответ дан 3 December 2019 в 00:51
поделиться

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

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

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

PHP Short Open Tag: Удобное сокращение или изменение безопасности?

18
ответ дан 3 December 2019 в 00:51
поделиться

Это сокращение для printOnLoad (); ?> . Более простой способ написать это, когда вы создаете шаблоны и тому подобное на основе PHP.

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

7
ответ дан 3 December 2019 в 00:51
поделиться

Просто чтобы исправить все эти вводящие в заблуждение ответы:

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

1
ответ дан 3 December 2019 в 00:51
поделиться

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

Обратите внимание на следующее:

1
ответ дан 3 December 2019 в 00:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: