Каков самый короткий способ вставки переменной в текст с помощью PHP?

StackOverflow https://stackoverflow.com/questions/1219008

  •  10-07-2019
  •  | 
  •  

Вопрос

Мне интересно, есть ли более короткий способ вставки текста в PHP, чем

<?php
$city = "London";
?>
This website is a funky guide to <?php print $city; ?>!!!

Например, используя Ruby on Rails, я мог бы установить

city = 'London'

где-то в коде и в моем файле .erb я мог бы сделать

This website is a funky guide to <%= city %>!!!

Я где-то это читал {$city} можно было бы использовать, но я попробовал, и это не помогло.Итак, существует ли более короткая форма, чем <?php print $var; ?> ?

Это было полезно?

Решение

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

Да, использование длинных тегов и echo/print может занять больше времени...Но я бы рекомендовал использовать именно их, а не короткие теги.


Также обратите внимание, что вам может потребоваться экранировать данные, если они получены из ненадежного источника и/или могут содержать HTML, который вы не хотите внедрять на страницу, чтобы избежать внедрения HTML/JS. (видеть htmlспециальные символы) :


РЕДАКТИРОВАТЬ после комментариев, чтобы добавить пару вещей о short_open_tag :

Почему считаются короткие открытые теги (по крайней мере, я ^^) плохая практика?

Прежде всего, после некоторой проверки они не включены по умолчанию:

Для PHP 5.3:

squale@shark:~/temp/php/php-5.3.0
$ grep 'short_open_tag' php.ini-development
; short_open_tag
short_open_tag = Off
squale@shark:~/temp/php/php-5.3.0
$ grep 'short_open_tag' php.ini-production
; short_open_tag
short_open_tag = Off

По умолчанию отключено в любом "development" или "production" настройки.

Для PHP 5.2.10 (самая последняя версия PHP 5.2) :

squale@shark:~/temp/php/php-5.2.10
$ grep 'short_open_tag' php.ini-dist
short_open_tag = On
squale@shark:~/temp/php/php-5.2.10
$ grep 'short_open_tag' php.ini-recommended
; - short_open_tag = Off           [Portability]
short_open_tag = Off

По умолчанию отключено в "recommended" настройки


Учитывая эти настройки по умолчанию, иногда (часто ?) хранятся на хостинге, опасно полагаться на short_open_tag активируется.
(Я сам сталкивался с проблемой инвалидов...А когда вы не являетесь администратором сервера и у вас нет необходимых привилегий для его изменения, это невесело ^^)

Если вам нужны цифры, вы можете посмотреть Быстрый опрос: short_open_tag поддержка включена или выключена по умолчанию?
(Не является научным доказательством, но показывает, что использовать их для приложения, которое вы хотите опубликовать, может быть опасно)


Как вы сказали, они при активации конфликтуют с декларацией XML - это означает, что вам нужно использовать что-то вроде этого:

<?php echo '<?xml version="1.0" encoding="UTF-8" ?>'; ?>

Учитывая, что короткие открытые теги существуют и могут быть активированы на сервере, который вы будете использовать, вам, вероятно, не следует использовать <?xml хотя бы когда-нибудь;очень жаль :-(


На самом деле, чтение php.ini, рекомендованного PHP 5.2.10:

; Allow the <? tag.  Otherwise, only <?php and <script> tags are recognized.
; NOTE: Using short tags should be avoided when developing applications or
; libraries that are meant for redistribution, or deployment on PHP
; servers which are not under your control, because short tags may not
; be supported on the target server. For portable, redistributable code,
; be sure not to use short tags.

Вариант из PHP 6 еще интереснее:

; This directive determines whether or not PHP will recognize code between
; <? and ?> tags as PHP source which should be processed as such. It's been
; recommended for several years that you not use the short tag "short cut" and
; instead to use the full <?php and ?> tag combination. With the wide spread use
; of XML and use of these tags by other languages, the server can become easily
; confused and end up parsing the wrong code in the wrong context. But because
; this short cut has been a feature for such a long time, it's currently still
; supported for backwards compatibility, but we recommend you don't use them.

(Может быть то же самое в PHP 5.3;не проверял)


Там были слухи короткие открытые теги могут быть удалены из PHP 6;учитывая только что опубликованную часть php.ini, вероятно, этого не произойдет...но все равно...


Чтобы привести аргумент, указывающий на другое направление (в конце концов, я должен быть честен):использование коротких открытых тегов для файлов шаблонов (только) это то, что часто делается в примерах Zend Framework, использующих файлы шаблонов:

В наших примерах и документации мы используйте короткие теги PHP:

Тем не менее, многие разработчики предпочитают использовать полные теги для целей валидация или переносимость.Для экземпляр, short_open_tag отключен в файле php.ini.recommended, и если вы шаблонируете XML в сценариях представления, короткие открытые теги вызовут шаблоны для неудачной валидации.

(источник)

Напротив, для .php файлы:

Короткие теги никогда не допускаются.Для файлы, содержащие только PHP код, закрывающий тег всегда должен быть опущен

(источник)


Я надеюсь, что эта информация окажется полезной и даст ответ на ваш комментарий. :-)

Другие советы

Если вы выйдете из режима PHP, единственный способ распечатать переменную — это переключиться обратно в нее и напечатать ее, как вы это сделали выше.Вы можете остаться в режиме PHP и использовать конструкцию {}, которую вы пробовали:

<?php
$city = "London";
echo "This website is a funky guide to {$city}!!!";
?>

Я где-то читал, что можно использовать {$city}

Если вы выберете движок шаблонов, такой как Умник вы можете сделать это.Это может быть полезно, если вы разрабатываете в команде, и некоторые из них не знают PHP.

В противном случае самое короткое, что вы получите, это следующее, если у вас включены короткие теги:

<?=$city?>

Если вы этого не сделали или создаете приложение для распространения среди других, используйте это:

<?php echo $city ?>

Просто расширьте свой блок PHP и сделайте следующее:

<?php
$city = 'London';
echo 'This website is a funky guide to ',$city,' !!!';
?>

Альтернативно вы можете использовать " " вместо ' ' и заменить ',$city,' с $city, но для анализа переменных требуется больше времени процессора.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top