变量连接的单引号或双引号? [关闭]
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 的单引号或双引号之间