将变量(例如$name
)连接到现有字符串(例如$string
)中,哪种方式更好:
$string='Hi, my name is '.$name
或者像这样将变量嵌入字符串中:$string="Hi, my name is $name";
还是使用像这样的函数更好:
$string=sprintf("Hi, my name is %s",$name);
在处理器时间/效率方面,哪个更好?
将变量(例如$name
)连接到现有字符串(例如$string
)中,哪种方式更好:
$string='Hi, my name is '.$name
或者像这样将变量嵌入字符串中:$string="Hi, my name is $name";
还是使用像这样的函数更好:
$string=sprintf("Hi, my name is %s",$name);
在处理器时间/效率方面,哪个更好?
所有做过测试的人都得出结论:在性能方面,使用单引号略优于双引号。因为单引号只是个连接操作,而双引号则会强制解析字符串中的变量。
然而,对于PHP的最新版本来说,这种额外负担如此之小,以至于大多数时间并不重要。
所以对于追求性能的人:使用单引号。对于“我喜欢我的代码易读”的人:双引号更易于阅读,就像Flavius Stef已经指出的那样。
编辑:但是有一件事 - 如果您要在字符串中使用一个未定义的变量,务必使用单引号! (http://www.weberdev.com/get_example-3750.html 指出解析这些字符串将需要4倍的时间)
在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;
- alexia我一般认为使用字符串插值("Hi, my name is $name"
)从可读性的角度来看更好。
$var = "My $string with $lots of $replacements."
比起这样写:
更容易阅读。$var = 'My ' . $string . ' with ' . $lots . ' of ' . $replacements . '.';
我承认:
$var = "My string.";
看起来与以下内容几乎相同:
$var = 'My String.';
就我个人而言,如果只是一个普通变量,甚至是一个类属性,我会这样写:
$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]>
。 - Marc B从语法角度来看,两种变体都是正确的。使用你感觉更舒适的那个。
就我个人而言,当使用$string="Hi, my name is $name"
时,我感觉更好,因为你不需要操心引号的问题。想象一下带有10个变量的复杂SQL查询...
PHP 的速度相对较慢:
第三张幻灯片
所以不要过于担心这些小优化。
更多地关注使用APC将您的代码缓存为字节码。您将看到项目的巨大速度提升。
在连接变量时,单引号字符串比双引号字符串更好的选择。 点击链接以获得更好的理解...
我的座右铭和答案是:把编写机器代码的任务留给编译器。我将告诉你我的意思...
在不需要包含 PHP 变量时,请使用单引号,否则请使用双引号。 不要担心性能问题,只需在生产服务器上使用 APC。相反,专注于编写最易维护的代码;适当地使用注释、双引号等,即使它们可能会减慢代码速度。任何降低代码可维护性/可读性的优化都是有害的,把这些任务留给操作码缓存器和编译器来将您的代码转换为机器代码,不要自作聪明...因为优化而混淆您的源代码会招致反效果。
$string='Hi, my name is '.$name
这是最好的方式,从php和html的结合角度来看!
或者像这样:
$string="Hi, my name is $name";
这是旧方法!
或者像这样:
$string=sprintf("Hi, my name is %s",$name);
"Hi, my name is $name"
是“老旧的”,而且认为'Hi, my name is '.$name
更好的说法! - Josh