PHP - 连接或直接在字符串中插入变量

我想知道,将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 - 除非你正在进行成千上万的连接与插值 - 而且情况可能并非如此。     
双引号字符串更优雅,因为每次需要插入变量时都不必分解字符串(就像必须使用单引号字符串一样)。 但是,如果需要插入函数的返回值,则无法将其插入双引号字符串中 - 即使用大括号括起来也是如此!
//syntax error!!
//$s = "Hello {trim($world)}!"

//the only option
$s = "Hello " . trim($world) . "!";
    
从php4开始,您可以使用字符串格式化程序:
$num = 5;
$word = 'banana';
$format = 'can you say %d times the word %s';
echo sprintf($format, $num, $word);
来源:sprintf()     
任何一个都没问题。使用具有更好可见性的那个。谈到可见性,您还可以查看printf。     
我知道这个问题已经有了一个选定的答案,但我发现这篇文章显然表明字符串插值比连接更快。对那些仍然有疑问的人可能会有所帮助。     
从使思考简单,可读,一致和易于理解的角度来看(因为这里的表现并不重要): 当您想要嵌入对象属性,多维数组等时,在双引号中使用嵌入式变量会导致复杂和混乱的情况。 也就是说,通常在阅读嵌入式变量时,您无法立即100%确定您正在阅读的内容的最终行为。 您经常需要添加诸如
{}
之类的拐杖,IMO会增加混淆并使连接可读性几乎等同,如果不是更好的话。 只要你需要在var周围包装函数调用,例如
htmlspecialchars($var)
,就必须切换到串联。 AFAIK,你不能嵌入常量。 在某些特定情况下,“使用vars嵌入的双引号”可能很有用,但一般来说,我会选择连接(方便时使用单引号或双引号)     
与第一个一起使用并使用单引号! 它更容易阅读,这意味着其他程序员将知道发生了什么 它的工作速度稍微快一点,当PHP分析你的源代码时,操作码的创建方式,无论如何基本上都会这样做,所以尽量伸出援手! 如果你还使用单引号而不是双引号,那么你的性能会更高。 你应该使用双引号的唯一情况是,当你需要
r
n
t
! 在任何其他情况下使用它的开销都是不值得的。 您还应该检查PHP变量连接,phpbench.com以获取有关不同处理方法的一些基准测试。     
这只是品味问题。 随心所欲。 大部分时间我都在使用第二个,但这取决于。 我建议你也让自己成为一个好的编辑器,它会突出显示字符串中的变量     
不要连接。我们不需要它,因为echo可以采用多个参数
echo "Welcome ", $name, "!";
关于使用单引号或双引号,差异可以忽略不计,您可以使用大量字符串进行测试以自行测试。     
你应该选择第一个。除了性能之外,它们没有区别,第一个是第二个的比较快。 如果双引号PHP中的变量需要时间来解析变量。 查看变量连接的单引号或双引号? 这是另一个例子在php中有单引号vs双引号的性能优势吗? 我不明白为什么上面链接中的这个答案得到了投票,为什么这个答案得到了回报。 正如我说的一样。 你也可以在这里看看 什么是PHP,单引号或双引号更快?     
如果你想执行一个
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]')";
    
我知道这是一个老问题,但我认为有人必须提到所有的优点和问题。缺点: 更好的语法:这是个人偏好。 表现:没有区别。正如许多人提到的,如果使用不切实际的许多变量,双引号可能会更快。 更好的用法:单引号(主要是)。正如@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) . "!";
结论:使用您喜欢的。     

要回复问题请先登录注册