使用PHP将变量插入文本的最短方法是什么?

时间:2009-08-02 14:29:12

标签: php ruby-on-rails shortcuts

我想知道在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 个答案:

答案 0 :(得分:5)

您可以使用必须在您的配置中启用的short_open_tag,但这不是一个好习惯,因为它只有在启用时才有效 - 并且它们并非总是(可能甚至没有默认情况下)

使用长标签和回显/打印可能会更长,是的......但我建议使用那些,而不是短标签。


另请注意,当数据来自不受信任的来源和/或可能包含您不希望在页面中注入的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被激活是危险的。
(我自己遇到了那些被禁用的人的问题......当你不是服务器的管理员并且没有必要的特权来修改它时,它并不好玩^^)

如果您想要一些数字,可以查看Quick survery: short_open_tag support on or off by default?
(不是科学证据 - 但表明将它们用于您向公众发布的应用程序可能很危险)


就像你说的那样,那些在激活时会与XML声明冲突 - 意味着你必须使用这样的东西:

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

考虑到存在短暂打开的标签,并且可能会在您将使用的服务器上激活,但您可能不会使用<?xml。太糟糕了: - (


实际上,阅读php.ini-recommended of 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中删除rumors个短开标记;考虑到我刚刚发布的php.ini部分,它可能不会......但是,仍然......


提出指向另一个方向的论据(毕竟我必须说实话):使用短开标签用于模板文件 (仅限)是经常出现的事情在Zend Framework的使用模板文件的示例中完成:

  

在我们的示例和文档中,我们   使用PHP短标签:      

也就是说,很多开发者都喜欢   使用完整标签的目的   验证或可移植性。对于   例如,short_open_tag被禁用   在php.ini.recommended文件中,和   如果您在视图脚本中模板化XML,   短开标签会导致   模板验证失败。

source

相反,对于.php个文件:

  

永远不允许使用短标签。对于   只包含PHP代码的文件   必须始终省略结束标记

source


我希望这些信息有用,并为您的评论带来某种答案: - )

答案 1 :(得分:2)

如果您退出PHP模式,那么打印变量的唯一方法是切换回它并像上面一样打印它。您可以保持PHP模式并使用您尝试的{}构造:

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

答案 2 :(得分:1)

  

我确实读过可以使用{$ city}的地方

如果你选择Smarty之类的模板引擎,你可以这样做。如果您在团队中开发并且其中一些人不了解PHP,那么这可能很有用。

否则,假设您启用了短标记,您将得到以下最短信息:

<?=$city?>

如果你没有,或者你正在创建一个应用程序以重新分发给其他人,那么使用它:

<?php echo $city ?>

答案 3 :(得分:0)

只需扩展您的PHP块并执行此操作:

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

或者,您可以使用“”代替''并将',$city,'替换为$city,但需要更多的CPU时间来解析变量。