我想知道,将PHP变量插入字符串的正确方式是什么?
是这样的:
echo "Welcome ".$name."!"
或者这样做:
echo "Welcome $name!"
这两种方法在我的 PHP v5.3.5
中都有效。后者更简短、更简单,但我不确定第一种是否更好的格式化或被认为更合适。
我想知道,将PHP变量插入字符串的正确方式是什么?
是这样的:
echo "Welcome ".$name."!"
或者这样做:
echo "Welcome $name!"
这两种方法在我的 PHP v5.3.5
中都有效。后者更简短、更简单,但我不确定第一种是否更好的格式化或被认为更合适。
在这两种语法中,你应该选择自己更喜欢的那一种 :-)
就我个人而言,在这种情况下(变量插值),我会选择你的第二种解决方案,因为我觉得它更容易编写和阅读。
结果将是相同的;即使存在性能影响,也不会有影响。1
作为一个旁注,为了让我的回答更加完整,假设你日后想要做这样的事情:
echo "Welcome $names!";
PHP 会将您的代码解释为尝试使用不存在的 $names
变量。请注意,只有在使用双引号 "" 而不是单引号 '' 时才能起作用。
那一天,您将需要使用 {}
:
echo "Welcome {$name}s!"
无需回退到连接字符串。
同时请注意您的第一个语法:
echo "Welcome ".$name."!";
可能可以进行优化,避免使用字符串拼接,使用以下代码:
echo "Welcome ", $name, "!";
(但是,就像我之前说过的那样,这并不太重要...)
1 - 除非你正在执行数十万次的连接操作而不是插值操作 -- 这种情况可能并不太常见。
echo
命令,而不是其他任何地方。 - colincamerontime php -r '$string=""; for ($i=0;$i<199999;$i++){ $string = $string.$i; } print("Done!\n");'
(字符串拼接)实际上比使用插值(time php -r '$string=""; for ($i=0;$i<199999;$i++){ $string = "{$string}{$i}"; } print("Done!\n");'
)慢了大约300毫秒(对于20万个元素,每千个元素的时间差为1毫秒)。这种差别可以归因于统计误差,无法测量到任何实质性的差异。考虑到它更易读性,使用插值(time php -r '$string=""; for ($i=0;$i<199999;$i++){ $string = "{$string}{$i}"; } print("Done!\n");'
)毫无争议地获胜... - Fernando Cordeiro双引号字符串更优雅,因为每次需要插入变量时,不必像单引号字符串那样打破字符串。
但是,如果您需要插入函数的返回值,则无法将其插入双引号字符串中,即使您用大括号{}将其包裹起来也不行!
//syntax error!!
//$s = "Hello {trim($world)}!"
//the only option
$s = "Hello " . trim($world) . "!";
$x = 'trim'; $string = "hello {$x('blah blah blah')}";
- Michael自 PHP4 开始,您可以使用字符串格式化器:
$num = 5;
$word = 'banana';
$format = 'can you say %d times the word %s';
echo sprintf($format, $num, $word);
来源:sprintf()
我一直都更喜欢这个,并且发现它更容易。
echo "Welcome {$name}!"
$matches[0][1]
。 - alpha-helix从让事情变得简单、可读、一致和易于理解的角度来看(因为性能在这里并不重要):
在双引号中使用嵌入式变量可能会导致复杂和混乱的情况,当您想要嵌入对象属性、多维数组等时。
也就是说,通常在阅读嵌入式变量时,您无法立即100%确定您正在阅读的最终行为。
您经常需要添加诸如{}
和\
之类的支架,我认为这增加了混淆,并使连接可读性几乎相等,如果不是更好。
一旦您需要在变量周围包装一个函数调用,例如htmlspecialchars($var)
,您必须切换到连接。
据我所知,您无法嵌入常量。
在某些特定情况下,“带有变量嵌入的双引号”可能很有用,但总体而言,我会选择连接(在方便时使用单引号或双引号)。
我使用点(.)将字符串和变量连接起来,像这样-
echo "Hello ".$var;
echo "Hello {$var}";
首选使用单引号!
唯一需要使用双引号的情况是需要使用 \r
, \n
, \t
时!在任何其他情况下使用它的开销都不值得。
您还应该查看PHP变量拼接,以及phpbench.com中有关执行不同方法的基准测试。
\r
、\n
和\t
是个好点子,其他答案没有包括这一部分。 - evilReiko不要连接字符串。没必要这么做,可以使用逗号,因为echo命令可以接受多个参数。
echo "Welcome ", $name, "!";
关于使用单引号或双引号的区别可以忽略不计,您可以测试大量字符串以自行测试。
echo 'Welcome '.$name.'!';
。 - KJYe.Name