将变量(例如,$name
)连接到现有字符串(例如,$string
)是否更好,如下所示:
$string='Hi, my name is '.$name
或将变量嵌入字符串中,如下所示:
$string="Hi, my name is $name";
或者使用这样的函数更好:
$string=sprintf("Hi, my name is %s",$name);
在处理器时间/效率方面哪个更好?
答案 0 :(得分:25)
每个参加测试的人都认为使用单引号会略微提高性能。最后,单引号只会导致连接,而双引号会强制解释器解析变量的完整字符串。
然而,对于PHP的最新版本而言,这样做的额外负担是如此之小,以至于大部分时间结论是它并不重要。
所以对于表现人物:使用单引号。对于“我喜欢我的代码可读”-people:双引号在易读性方面要好得多,正如Flavius Stef已经指出的那样。
编辑:但有一件事 - 如果您要在没有变量的字符串中使用一美元,请务必使用单引号! (http://www.weberdev.com/get_example-3750.html指出解析这些字符串需要4倍的时间)
答案 1 :(得分:11)
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 :(得分:8)
我普遍认为从易读性的角度来看,使用字符串插值("Hi, my name is $name"
)会更好。
答案 3 :(得分:5)
对于性能,正如其他人已经证明的那样,使用单引号而不是双引号会稍微快一些。
单引号,如果应用于可读性科学并远离主观性,实际上会增加更多“噪音”。 “清洁代码”一书中讨论了噪声及其与可读性的关系,人们可以得出结论,你必须看到的非空白越多,它就越妨碍可读性。如果应用于主观性,我花时间阅读的大多数地方实际上更喜欢单引号。
使用你的判断。
$var = "My $string with $lots of $replacements."
比以下内容更具可读性:
$var = 'My ' . $string . ' with ' . $lots . ' of ' . $replacements . '.';
我承认:
$var = "My string.";
看起来几乎相同:
$var = 'My String.';
然而后者引入的噪音较少,当周围有很多代码时,每一点都有帮助,更不用说使用单引号带来的其他好处。
最后,我更喜欢KISS。除非您需要双引号,否则请使用单引号。简单的约定,更容易键入,更易于维护,更易于解析和更易于阅读。
答案 4 :(得分:0)
从语法角度来看无关紧要。两种变体都是正确的。使用你感觉更舒服的东西。
就个人而言,使用$string="Hi, my name is $name"
时我感觉更好,因为你不需要乱用引号。只需使用10个变量...
答案 5 :(得分:0)
PHP很慢:
幻灯片#3
所以不要过于担心像这样的小优化。
更多关注使用APC将代码缓存为字节代码。你会看到该项目的速度大幅提升。
答案 6 :(得分:0)
就个人而言,如果它只是一个普通变量,甚至是一个类属性,我会这样写:
$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';
希望这是有道理的。这都是关于寻找惯例并坚持下去的。
答案 7 :(得分:0)
我的座右铭和答案是:将它留给编译器编写机器代码。我会告诉你我的意思......
当您不需要包含PHP变量时使用单引号,否则使用双引号。 不要担心性能只是在生产服务器上使用APC。而是专注于编写最易维护的代码;正确使用注释,双引号等,即使它们可能会降低代码速度。每个降低代码可维护性/可读性的优化都是不好的,请将其留给操作码 - 编译器和编译器将代码转换为机器代码,不要自己动手操作......因为优化会导致源代码混淆。
答案 8 :(得分:0)
在连接变量时,单引号字符串比双引号字符串更好。 点击链接以便更好地理解...
答案 9 :(得分:-5)
$string='Hi, my name is '.$name
这是最好的方式,在php和html组合的意义上!
或者像这样:
$string="Hi, my name is $name";
这是旧方法!
或者像这样:
$string=sprintf("Hi, my name is %s",$name);
这是来自Visual Basic或其他客户编程语言的程序员会写的!
我希望我能提供帮助。