简单的回答,显然是苍白无力的。今天我们来做个实验,看看到底单引号和双引号有什么区别,谁快,谁慢。
测试代码如下:
复制代码代码如下:
$single_quotes='ThisisaString';
$double_quotes="ThisisaString";
echo$single_quotes;
echo$double_quotes;
$var='String';
$single_quotes_var='Thisisa'.$var;
$double_quotes_var="Thisisa$var";
echo$single_quotes_var;
echo$double_quotes_var;
$var='This';
$single_quotes_var_pre=$var.'isaString';
$double_quotes_var_pre="$varisaString";
echo$single_quotes_var_pre;
echo$double_quotes_var_pre;
?>
接下来,让我们以前文章提到过的Opcodes生成器来看看,最终我们的这段代码是怎么被执行的:
复制代码代码如下:
Branchanalysisfromposition:0
Returnfound
filename:/home/xinchen/string.php
functionname:(null)
numberofops:24
compiledvars:!0=$single_quotes,!1=$double_quotes,!2=$var,!3=$single_quotes_var,!4=$double_quotes_var,!5=$single_quotes_var_pre,!6=$double_quotes_var_pre
line#opfetchextreturnoperands
-------------------------------------------------------------------------------
20ASSIGN!0,'This+is+a+String'
31ASSIGN!1,'This+is+a+String'
42ECHO!0
53ECHO!1
74ASSIGN!2,'String'
85CONCAT~3'This+is+a+',!2
6ASSIGN!3,~3
97INIT_STRING~5
8ADD_STRING~5~5,'This+is+a+'
9ADD_VAR~5~5,!2
10ASSIGN!4,~5
1111ECHO!3
1212ECHO!4
1413ASSIGN!2,'This'
1614CONCAT~8!2,'+is+a+String'
15ASSIGN!5,~8
1716INIT_STRING~10
17ADD_VAR~10~10,!2
18ADD_STRING~10~10,'+is+a+String'
19ASSIGN!6,~10
1920ECHO!5
2021ECHO!6
2222RETURN1
23*ZEND_HANDLE_EXCEPTION
注意第0到第3条opline,可以看出在没有使用变量替换的情况下,双引号的和单引号所产生的Opcodes是一样的。
再来看:第4到第12条,可以发现,在使用变量替换的情况下,使用双引号和单引号所生成的Opcodes是不一样的,我们来分析双引号情况下的Opcodes:
7INIT_STRING初始化一个字符串变量,存放在~5临时变量中。
8ADD_STRING将第一部分字符串写入。
9ADD_VAR将变量替换的字符串写入。
第16-28行同理。
从这里我们可以发现,在使用双引号的情况下和使用单引号的情况下,同样的逻辑,所经历的执行确实不一样的(因为,Opcodes对于PHP来说就是最终的执行代码)。单单从生成的Opcods数量来说,就已经足以证明确实是使用单引号会快了。
至于编译阶段,双引号和单引号的区别也是很大的,我就举个数字来说明:在scanning阶段,对于双引号的词法规则有14条,而对于单引号,仅仅只有6条。
呵呵,是不是经过这样的分析,你会更清楚的了解到以后该怎么使用单引号和双引号了呢?
顺便说一句,对于不需要变量替换的纯字符串,大家都知道,因为在C/C++中,双引号才表示字符串,所以这种情况下,还是使用双引号的好。
另外对于W3C标准来说,HTML中的属性值应该是使用双引号来包含的,所以不要习惯了单引号,到处滥用哦
您可能感兴趣的文章:phpinclude加载文件两种方式效率比较php中读写文件与读写数据库的效率比较分享PHP字符串长度判断效率更高的方法PHP遍历数组的三种方法及效率对比分析php程序效率优化的一些策略小结关于php几种字符串连接的效率比较(详解)PHP中3种生成XML文件方法的速度效率比较PHP静态延迟绑定和普通静态效率的对比