我想知道,将PHP变量插入字符串的正确方法是什么?
这条路:
echo "Welcome ".$name."!"
或者这样:
echo "Welcome $name!"
这两种方法都可以在我的电脑上使用PHP v5.3.5
。后者更短,更简单,但是我不确定第一种格式是否更好或是否被认为更合适。
我想知道,将PHP变量插入字符串的正确方法是什么?
这条路:
echo "Welcome ".$name."!"
或者这样:
echo "Welcome $name!"
这两种方法都可以在我的电脑上使用PHP v5.3.5
。后者更短,更简单,但是我不确定第一种格式是否更好或是否被认为更合适。
Answers:
在这两种语法之间,您应该真正选择一种您喜欢的语法:-)
就我个人而言,在这种情况下(可变插值),我会采用您的第二个解决方案,我发现它更容易写和读。
结果将是相同的;即使有性能影响,也没关系1。
作为旁注,所以我的回答更加完整:那天您要做这样的事情:
echo "Welcome $names!";
PHP将解释您的代码,就像您尝试使用该$names
变量一样-该变量不存在。-请注意,仅当您在字符串中使用“”而不是”时,它才有效。
那天,您需要使用{}
:
echo "Welcome {$name}s!"
无需回退到串联。
另请注意,您的第一个语法:
echo "Welcome ".$name."!";
可以使用以下方法进行优化,避免串联:
echo "Welcome ", $name, "!";
(但是,正如我之前说的,这无关紧要...)
1-除非您要进行数以十万计的级联与插值-否则情况可能并非如此。
{}
。
echo
,而不能用于其他任何地方。
time php -r '$string=""; for ($i=0;$i<199999;$i++){ $string = $string.$i; } print("Done!\n");'
)实际上损失了约300毫秒(对于200.000项,这就是您设置的每千个元素1 miliseconf ...)。这是统计噪声,甚至无法测量任何差异。考虑到它更具可读性,time php -r '$string=""; for ($i=0;$i<199999;$i++){ $string = "{$string}{$i}"; } print("Done!\n");'
(插值)是无可争议的赢家……
用双引号引起来的字符串更优雅,因为您不必每次都需要插入变量时就将其分解(就像必须使用单引号引起来的字符串一样)。
但是,如果您需要插入函数的返回值,则即使将其用大括号括起来,也无法将其插入双引号字符串中!
//syntax error!!
//$s = "Hello {trim($world)}!"
//the only option
$s = "Hello " . trim($world) . "!";
$x = function() { ...}; $string = "hello {$x(blah blah blah)}"
,它可以解决“限制”问题。
$x = 'trim'; $string = "hello {$x('blah blah blah')}";
$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。
从使思想变得简单,可读,一致和易于理解的角度考虑(因为此处的性能无关紧要):
当您要嵌入对象属性,多维数组等时,在双引号中使用嵌入式var可能导致复杂而令人困惑的情况。也就是说,通常在读取嵌入式var时,您无法立即100%确定所读取内容的最终行为。
您经常需要添加拐杖,例如{}
和\
,这会使IMO造成混乱,并使串联可读性几乎相等,甚至更好。
例如htmlspecialchars($var)
,一旦需要将函数调用包装在var周围,就必须切换到串联。
AFAIK,您不能嵌入常量。
在某些特定情况下,“带有vars嵌入的双引号”可能会有用,但是一般而言,我会进行级联(在方便时使用单引号或双引号)
首先,使用单引号!
什么时候应该使用双引号的唯一情况,就是当你需要\r
,\n
,\t
!在任何其他情况下使用开销只是不值得的。
您还应该检查PHP变量串联,phpbench.com,以了解有关不同处理方法的一些基准。
\r
,\n
和\t
其他的答案不包括该位。
只是口味问题。
使用任何您想要的。
大多数时候,我使用第二个,但这要看情况。
让我建议您也让自己成为一个好的编辑器,该编辑器将突出显示字符串中的变量
您应该选择第一个。它们没有区别,只是第一个的性能比第二个的快。
如果双引号中的变量PHP需要花一些时间来解析变量。
这是另一个示例。在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
和一致好评。
可读性:没什么区别(可能适用个人喜好)。
可写性/可重写性/调试:在1行语句中没有区别,但是当处理多行时,在调试或编写时注释/取消注释行会更容易。例如:
$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) . "!";
结论:使用您喜欢的东西。
echo 'Welcome '.$name.'!';