变量连接的单引号或双引号? [关闭]

Posted

技术标签:

【中文标题】变量连接的单引号或双引号? [关闭]【英文标题】:Single quotes or double quotes for variable concatenation? [closed] 【发布时间】:2011-03-19 23:11:54 【问题描述】:

像这样将一个变量(比如$name)连接到一个现有的字符串(比如$string)中更好吗:

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

或者像这样将变量嵌入到字符串中:

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

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

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

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

【问题讨论】:

我会说,这取决于数据来自哪里......用户输入或系统输入 会有性能差异吗?即,每个处理器时间更多? php - "Sal's mall is $emo" vs "Sal's mall is ".$emo - string with quotes concatenation efficiency 的可能重复项 /me 在站点名人丹格罗斯曼挥手。 必读:Disproving the Single Quotes Performance Myth (Jan 2012; by NikiC) 【参考方案1】:

进行测试的每个人都得出结论,使用单引号会稍微提高性能。最后,单引号导致只是串联,而双引号强制解释器解析变量的完整字符串。

但是,对于 PHP 的最新版本而言,这样做所增加的负担是如此之小,以至于大多数时候得出的结论是这并不重要。

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

编辑:但有一件事 - 如果您要在没有变量的字符串中使用一美元,请务必使用单引号! (http://www.weberdev.com/get_example-3750.html 指出解析这些字符串需要 4 倍的时间)

【讨论】:

“每个做过测试的人...”数据源? classyllama.com/development/php/php-single-vs-double-quotes procata.com/blog/archives/2005/03/08/… 这里有 2. google 可以给你更多。 我认为甚至不需要测试。这只是处理器指令数量的问题。你拥有的越少(在这种情况下很容易猜到),你就越快。 如果有曾经相关的性能原因现在没有区别 - nikic.github.io/2012/01/09/… 老兄.. 认真的吗?您不仅在回答一个超过 6 年的答案,而且您基本上说的是完全相同的事情。这就是“稍微好一点”的意思:“非常轻微”。【参考方案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;

【讨论】:

另一种方式:echo $str1, $str2;【参考方案3】:

从易读性的角度来看,我通常认为使用字符串插值 ("Hi, my name is $name") 更好。

【讨论】:

【参考方案4】:

正如其他人已经证明的那样,就性能而言,使用单引号比双引号要快一些。

单引号,如果应用于可读性科学并远离主观性,实际上会增加更多的“噪音”。噪声及其与可读性的关系在 Clean Code 一书中进行了很多讨论,并且可以得出结论,您必须看到的非空白越多,它就越妨碍可读性。如果应用于主观性,我花时间阅读的大多数地方实际上更喜欢单引号而不是双引号。

运用你的判断。

$var = "My $string with $lots of $replacements."

比以下更具可读性:

$var = 'My ' . $string . ' with ' . $lots . ' of ' . $replacements . '.';

我承认:

$var = "My string.";

看起来几乎一样:

$var = 'My String.';

然而,后者引入的噪音更少,并且当它周围有大量代码时,每一点都会有所帮助,更不用说使用单引号带来的其他好处了。

最后,我更喜欢 KISS。除非您需要双引号,否则请使用单引号。简单的约定,更易于键入、更易于维护、更易于解析和更易于阅读。

【讨论】:

【参考方案5】:

从语法的角度来看并不重要。两种变体都是正确的。使用你觉得更舒服的东西。

就我个人而言,使用$string="Hi, my name is $name" 时我感觉更好,因为你不需要乱用引号。只需使用 10 个变量来想象复杂的 SQL 查询...

【讨论】:

【参考方案6】:

PHP 很慢:

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-088-introduction-to-c-memory-management-and-c-object-oriented-programming-january-iap-2010/lecture-notes/MIT6_088IAP10_lec01.pdf

幻灯片 #3

所以不要太担心像这样的小优化。

不过,更多地关注使用 APC 将您的代码缓存到字节码中。您会看到该项目的速度大幅提升。

【讨论】:

【参考方案7】:

个人来说,如果只是普通变量,甚至是类属性,我会这样写:

$newVarA = "This is some text with a $variable";
$newVarB = "This is some more text, written in $settings->language";

但是,如果我使用数组值,那么我将用单引号连接起来。

$newVarC = 'This is some text from a ' . $text['random'] . ' array';

希望这是有道理的。一切都是为了找到惯例并坚持下去。

【讨论】:

您的数组示例在没有串联的情况下工作得很好。 ... from a $text['random'] array,或... from a $text[random] array。如果您要引用多维数组,您只需 必须 使用 方法,因为 PHP 的解析器不是贪婪的。 $array[x][y] 将被解析为 <contents of $array[x]><plain text [y]> 是的。但是我发现在字符串中使用大括号对我来说有点难看。就像我说的,这只是我个人如何将字符串与变量连接起来的一个例子。【参考方案8】:

我的座右铭和答案是:让编译器编写机器代码。我会告诉你我的意思...

当您不需要包含 PHP 变量时使用单引号,否则使用双引号。 不要担心性能,只需在生产服务器上使用 APC。而是专注于编写最可维护的代码;正确使用 cmets、双引号等,即使它们可能会减慢代码速度。每一个降低代码可维护性/可读性的优化都是不好的,把它留给操作码缓存器和编译器把你的代码变成机器代码,不要自己做......因为优化而混淆你的源代码会反击。

【讨论】:

【参考方案9】:

在连接变量时,单引号字符串比双引号字符串更好。 单击链接以更好地理解...

http://www.codeforest.net/php-myth-busters-using-single-quotes-on-string-is-faster-then-double-quotes

【讨论】:

【参考方案10】:
$string='Hi, my name is '.$name

从php和html结合的意义上来说,这是最好的方式!

或者像这样:

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

这是老办法!

或者像这样:

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

这是来自 Visual Basic 或其他客户端编程语言的程序员会写的!

希望对你有所帮助。

【讨论】:

我不同意"Hi, my name is $name" 是“旧的”,而'Hi, my name is '.$name 在某种程度上更好!

以上是关于变量连接的单引号或双引号? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

用其他东西替换或删除新行,但只能在 CSV 文件上使用 PHP 的单引号或双引号之间

SQL语言中的单引号与双引号区别

在任何情况下,由于我们有模板文字(反引号),JavaScript仍需要单引号或双引号吗?

JavaScript字符串的单引号和双引号问题

Python中的单引号与双引号[关闭]

有关变量定义的单引号双引号无引号区别总结