PHP - 连接或直接在string中插入变量

时间:2011-04-09 15:39:35

标签: php string variables concatenation

我想知道,将PHP变量插入字符串的正确方法是什么?

这样:

echo "Welcome ".$name."!"

或者这样:

echo "Welcome $name!"

这两种方法都适用于我的PHP v5.3.5。后者更短更简单,但我不确定第一种是更好的格式还是更合适。

14 个答案:

答案 0 :(得分:303)

在这两种语法之间,您应该选择您喜欢的语法: - )

就个人而言,在这种情况下,我会选择第二种解决方案(可变插值),我发现它更容易写入和读取。

结果是一样的;即使有性能影响,那些也无关紧要 1


作为旁注,所以我的答案更加完整:你想做这样的事情的那一天:

echo "Welcome $names!";

PHP将解释您的代码,就像您尝试使用$names变量一样 - 这是不存在的。

那天,您需要使用{}

echo "Welcome {$name}s!"

无需回退连接。


另请注意您的第一个语法:

echo "Welcome ".$name."!";

可能优化,避免连接,使用:

echo "Welcome ", $name, "!";

(但是,正如我之前所说,这并不重要......)


1 - 除非你正在进行成千上万的连接与插值 - 而且情况可能并非如此。

答案 1 :(得分:16)

双引号字符串更优雅,因为每次需要插入变量时都不必分解字符串(就像必须使用单引号字符串一样)。

但是,如果您需要插入函数的返回值,则无法将其插入到双引号字符串中 - 即使用大括号括起来也是如此!

//syntax error!!
//$s = "Hello {trim($world)}!"

//the only option
$s = "Hello " . trim($world) . "!";

答案 2 :(得分:8)

因为php4你可以使用字符串格式化程序:

$num = 5;
$word = 'banana';
$format = 'can you say %d times the word %s';
echo sprintf($format, $num, $word);

来源:sprintf()

答案 3 :(得分:6)

任何一个都没问题。使用具有更好可见性的那个。说到可见性,您还可以查看printf

答案 4 :(得分:5)

我知道这个问题已经有了一个选定的答案,但我发现this article显然表明字符串插值比连接更快。这对那些仍然存在疑问的人可能会有所帮助。

答案 5 :(得分:4)

从认为简单可读一致易于理解的角度来看(表现并不重要):

  • 当您想要嵌入对象属性,多维数组等时,在双引号中使用嵌入式变量会导致复杂和混乱的情况。 也就是说,通常在阅读嵌入式变量时,您无法立即100%确定您正在阅读的内容的最终行为。

  • 您经常需要添加{}\之类的拐杖,IMO会增加混淆并使连接可读性几乎相等,即使不是更好。

  • 只要您需要围绕var包装函数调用,例如htmlspecialchars($var),就必须切换到连接。

  • AFAIK,你不能嵌入常量。

在某些特定情况下,“使用vars嵌入双引号”可能很有用,但一般来说,我会选择连接(方便时使用单引号或双引号)

答案 6 :(得分:3)

使用第一个并使用单引号!

  1. 它更容易阅读,这意味着其他程序员会知道发生了什么
  2. 它的工作速度稍微快一些,当PHP解析你的源代码时,就会创建操作码的方式,无论如何它基本上都会这样做,所以请伸出援助之手!
  3. 如果你还使用单引号而不是双引号,那么你的性能会更高。
  4. 您应该使用双引号的唯一情况是,当您需要\r\n\t时! 在任何其他情况下使用它都是不值得的。

    您还应该检查PHP variable concatenationphpbench.com,了解不同做法的基准。

答案 7 :(得分:3)

我一直很喜欢这样做,发现它容易得多。

echo "Welcome {$name}!"

答案 8 :(得分:2)

这只是味道问题 随心所欲。

大部分时间我都在使用第二个,但这取决于。

让我建议你自己一个好的编辑器,它会突出显示字符串中的变量

答案 9 :(得分:2)

不要连接。我们不需要它,因为echo可以采用多个参数

echo "Welcome ", $name, "!";

关于使用单引号或双引号,差异可以忽略不计,您可以使用大量字符串进行测试以自行测试。

答案 10 :(得分:1)

你应该选择第一个。除了表现之外,它们没有区别,第一个表现比较快。

如果双引号PHP中的变量需要时间来解析变量。

查看此Single quotes or double quotes for variable concatenation?

这是另一个例子Is there a performance benefit single quote vs double quote in php?

我不明白为什么上面链接中的这个答案得到了提升,以及为什么这个答案得到了落实。

正如我说的那样。

您也可以在这里查看

What is faster in PHP, single or double quotes?

答案 11 :(得分:1)

如果要执行SQL命令且变量是数组成员,则不应在数组[]内使用单引号(例如:['']);例如,如果将此字符串用作SQL命令,则会得到server error 500

$con = mysqli_connect('ServerName', 'dbUsername', 'dbPassword');
mysqli_select_db($con, 'dbName')

//'ID' is auto increment field.
$sql = "INSERT INTO sampleTable (ID, TraceNo) VALUES ('','$sampleArray['TraceNo']')";
mysqli_query($con, $sql)

正确的字符串是:

//'ID' is auto increment field.
$sql = "INSERT INTO sampleTable (ID, TraceNo) VALUES ('','$sampleArray[TraceNo]')";

答案 12 :(得分:1)

我使用点(。)连接字符串和变量。像这样-

echo "Hello ".$var;

有时,我使用花括号连接看起来像这样的字符串和变量-

echo "Hello {$var}";

答案 13 :(得分:0)

我知道这是一个老问题,但我认为有人必须提及所有专业人士。缺点:

更好的语法:这是个人偏好。

效果:没有区别。正如许多人提到的,如果使用不切实际的许多变量,双引号可能会更快。

更好的用法:单引号(主要是)。正如@Khez所说,使用单引号可以连接任何内容,甚至是函数调用和变量修改,如下所示:echo 'hi ' . trim($name) . ($i + 1);。双引号唯一可以做的就是单引号不能用\n\r\t等等。

可读性:没有区别(可能适用个人偏好)。

可写性/可重写/调试:在单行语句中没有区别,但在处理多行时,在调试或写入时更容易注释/取消注释行。例如:

$q = 'SELECT ' .
     't1.col1 ' .
     ',t2.col2 ' .
   //',t3.col3 ' .
     'FROM tbl1 AS t1 ' .
     'LEFT JOIN tbl2 AS t2 ON t2.col2 = t1.col1 ' .
   //'LEFT JOIN tbl3 AS t3 ON t3.col3 = t2.col2 ' .
     'WHERE t1.col1 = ' . $x . ' ' .
     '  AND t2.col2 = ' . $y . ' ' .
   //'  AND t3.col3 = ' . $z . ' ' .
     'ORDER BY t1.col1 ASC ' .
     'LIMIT 10';

减少转义:单引号。对于单引号,您只需要转换2个字符('\)。对于双引号,您需要转义2个字符("\)以及3个字符(如果需要)${})。

减少更改:单引号。例如,如果您有以下代码:

echo 'Number ' . $i . '!';

你需要将1增加到$ i,所以变得喜欢:

echo 'Number ' . ($i + 1) . '!';

但是对于双引号,你需要改变这个:

echo "Number $i!";

到此:

echo "Number " . ($i + 1) . "!";

结论使用您喜欢的内容