变量串联的单引号还是双引号?[已关闭]

2022-08-30 17:04:58

将变量(例如)连接到现有字符串(例如)中是否更好,如下所示:$name$string

$string='Hi, my name is '.$name

或者将变量嵌入到字符串中,如下所示:

$string="Hi, my name is $name";

还是使用这样的函数更好:

$string=sprintf("Hi, my name is %s",$name);

在处理器时间/效率方面哪个更好?


答案 1

每个做测试的人都得出结论,使用单引号在性能方面略胜一筹。最后,单引号只产生串联,而双引号则强制解释器解析变量的完整字符串。

然而,对于最新版本的PHP来说,这样做的额外负载是如此之小,以至于大多数时候的结论是它并不重要。

所以对于表演的人:使用单引号。对于“我喜欢我的代码可读性”的人:双引号对于易读性要好得多,正如Flavius Stef已经指出的那样。

编辑:不过有一件事 - 如果你打算在没有变量的情况下在字符串中使用一美元,那么肯定使用单引号!(http://www.weberdev.com/get_example-3750.html 指出,解析这些字符串需要4倍的时间)


答案 2

PHP中单引号和双引号之间的区别在于,双引号是“智能的”,因为它们在读取时会解析变量,而单引号是“愚蠢的”,不会尝试解析字符串中的任何字符。

这些导致您可以使用的字符的一些细微差异;基本上,使用单引号时唯一需要转义的字符是单引号本身:

'\''

虽然如果你使用双引号,你必须转义其他字符:

"\$"

但它也允许一些漂亮的东西,比如在末尾添加一个新行:

"my string\n"

使用单引号,您必须进行串联:

'my string' . chr(10)
'my string' . "\n"

通常,单引号更快,因为它们是“愚蠢的”。

但是,通常不应该真正担心这些问题,这称为过早优化,应该避免。

关于优化的几句话:一般来说,人们应该首先按照它应该工作的方式编写程序,然后找到最大的瓶颈并修复那些特定的瓶颈。如果在PHP中字符串速度确实是一个问题,您可能需要考虑切换到另一种语言。

关于速度:您可能希望更多地关注内存使用率而不是CPU时间。在这些情况下,CPU时间可以被认为是非常恒定的。在编写将迭代多次的算法时,CPU 时间更为相关。

关于串联:使用点运算符连接字符串的次数越多,使用的内存就越多。

请考虑以下情况:

$str1 = 'asdf';
$str2 = 'qwer';

// this will result in more memory being allocated for temporary storage
echo $str1 . $str2;

// this will not allocate as much memory as the previous example
echo $str1;
echo $str2;

推荐