Какой самый короткий способ вставить переменную в текст с помощью PHP? - PullRequest
0 голосов
/ 02 августа 2009

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

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

Например, используя ruby ​​на рельсах, я могу установить

city = 'London'

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

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

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

Ответы [ 4 ]

5 голосов
/ 02 августа 2009

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

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


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


РЕДАКТИРОВАТЬ после комментариев, чтобы добавить пару вещей о 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, закрывающий тег всегда должен быть пропущен

( источник )


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

2 голосов
/ 02 августа 2009

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

<?php
$city = "London";
echo "This website is a funky guide to {$city}!!!";
?>
1 голос
/ 02 августа 2009

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

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

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

<?=$city?>

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

<?php echo $city ?>
0 голосов
/ 02 августа 2009

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

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

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

...