单引号或双引号变量串联?

问题描述:

是更好地串联一个变量(比如,$name)到现有的字符串(比如,$string)是这样的:单引号或双引号变量串联?

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

或嵌入变量字符串像这样:

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

或者是它最好使用这样的功能:

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

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

+0

我会说,这取决于数据来自哪里...用户输入或系统输入 – Prix 2010-07-23 07:20:16

+0

会有性能差异吗?即每个处理器的时间更多? – ina 2010-07-23 07:22:19

+1

[PHP - “Sal's mall is $ emo”vs“Sal's mall is”。$ emo - string with quotes concatenation efficiency](http://*.com/questions/3394166/php-sals-mall-is -emo-vs-sals-mall-is-emo-string-with-quotes-concaten) – 2011-01-23 22:44:30

大家谁做的测试得出结论,使用单引号是稍微更好的性能明智。最后,单引号只会导致连接,而双引号会强制解释器解析变量的完整字符串。

然而,在这样做的附加载荷是PHP,大部分的时间得出的结论是,它并没有真正的问题的最后一个版本,所以小。

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

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

+7

“所有测试过的人......”数据源? – ina 2010-07-23 07:34:44

+1

http://classyllama.com/development/php/php-single-vs-double-quotes/ http://www.procata.com/blog/archives/2005/03/08/microbenchmarks-of-single-和双重qouting/ 这里是2.谷歌可以给你更多。 – Blizz 2010-07-23 07:41:47

+0

我认为测试甚至不是必需的。这只是一些处理器指令的问题。你越少(在这种情况下可以很容易猜测),你就越快。 – snowflake 2010-07-23 08:14:35

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

就个人而言,使用$string="Hi, my name is $name"的时候,因为你并不需要乱用引号我感觉好多了。只需将复杂的SQL查询映射为10个变量...

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

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来,虽然缓存你的代码成字节码。你会看到这个项目获得巨大的速度收益。

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

这是最好的方式,在PHP和HTML结合的感觉!

或像这样:

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

这是老样子!

或者这样:

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

这是从Visual Basic或其他客户端编程语言来编程会写!

我希望我是有帮助的。

+1

我不同意''你好,我的名字是$ name'''是“老”,并且''嗨,我的名字是'。$ name'好多了! – Josh 2011-01-23 22:47:40

个人而言,如果它只是一个正常的变量,甚至是类属性,我会写这样的:

$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'; 

希望这是有道理的。这完全是为了找到习惯并坚持下去。

+0

你的数组示例工作得很好,没有连接。 '...来自{$ text ['random']}数组',或者来自$ text [random]数组''。如果您引用了多维数组,则只有*有*使用{}方法,因为PHP的解析器不是贪婪的。 '$ array [x] [y]'将被解析为'的内容。 – 2010-07-23 17:26:40

+0

是的。但是我发现在字符串中使用大括号对我来说有点丑陋。就像我说的,这只是我个人如何将字符串与变量连接起来的一个例子。 – 2010-07-24 09:22:04

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; 
+2

另一种方式:'echo $ str1,$ str2;' – nyuszika7h 2011-01-24 08:42:16

我的座右铭,并回答是:交给编译器编写的机器代码。我会告诉你我的意思是...

当您不需要包含PHP变量时使用单引号,否则使用双引号。 不用担心性能,只需在生产服务器上使用APC即可。而是专注于编写最易维护的代码;尽量使用注释,双引号等等,尽管它们可能会降低代码速度。每种优化都会降低代码的可维护性/可读性,因此请将其交给操作码缓存和编译器,以便将代码转换为机器代码,而不要自己这样做......因为优化而导致原始代码混淆。

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

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

出于性能,正如其他人证明,这是稍快使用单引号,而不是双引号。

单引号,如果应用于可读性科学,远离主观性,实际上会增加更多的“噪音”。噪音及其与可读性之间的关系在“清洁代码”一书中讨论过很多,可以得出结论:您必须看到更多的非空白字符,它越会妨碍可读性。如果适用于主观性,我花时间阅读的大多数地方实际上更喜欢单引号。

使用你的判断。

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

比更可读:

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

我承认:

$var = "My string."; 

看起来几乎一样:

$var = 'My String.'; 

但是后者介绍更少的噪音以及有很多代码的时候每一点都有帮助,更不用说使用单引号获得的其他好处。

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