单引号直接输出就是了 ...
但是测试的结果给了我狠狠一击 ...
具体可以参见 这个帖子 ...
代码结果如下 ...
每个时间都是单行执行的时间 ...
另外我刚才还测试了一个东西 ...
结果测试出了 print 的效率要比 echo 低 ...
echo 'a', 'b', 'c' 的效率要比 echo( 'a'.b'.c' ) 低 ...
是我走入了一个什么误区还是之前的传闻都是错的 ...?

Sunyanzi 发表于: 2008-8-18 00:22 来源: PHPChina 开源社区门户

最新回复
这个也不知道怎么解释,但是让我想起另外一件事。
在命令行下面带参数“-r”可以直接将后面的参数视为php代码来执行。例如:
将会输出“3”
但是却下面两个语句在命令行中却可以得到不同的结果。
命令1可以得到正确的结果,命令2则报错,大意是输入了“意料外”的字符'(ASCII=39)。
也许php对单引号和双引号的处理跟我们大家想像的方式根本不一样……
很明显,当替换时候的速度要明显慢于直接输出。
若同时输出固定字符串比较,两者没有明显差别。
下面是我的测试代码:
测试结果如下:
F:\f>php quote.php
single-quote run time: 0.047601938247681
double-quote run time: 0.043661117553711
F:\f>php quote.php
single-quote run time: 0.04463791847229
double-quote run time: 0.044512033462524
F:\f>php quote.php
single-quote run time: 0.044708967208862
double-quote run time: 0.044021844863892
我最后一句话不是已经说了“若同时输出固定字符串比较,两者没有明显差别。”
[ 本帖最后由 laruence 于 2008-8-19 00:44 编辑 ]
CODE:
Branch analysis from position: 0在最终的opcods中,我们可以看到, 单引号字符串是直接输出,而双引号要经过contact,所以理论上来讲,一定是单引号的字符串处理起来快。Return found
filename: /home/xinchen/1.php
function name: (null)
number of ops: 21
compiled vars: !0 = $Sunyanzi
line # op fetch ext return operands
-------------------------------------------------------------------------------
2 0 ASSIGN !0, 'here'
4 1 ECHO 'Sunyanzi+is+%24Sunyanzi'
5 2 CONCAT ~1 'Sunyanzi+is+', !0
3 ECHO ~1
6 4 INIT_STRING ~2
5 ADD_STRING ~2 ~2, 'Sunyanzi+is+'
6 ADD_VAR ~2 ~2, !0
7 ECHO ~2
7 8 CONCAT ~3 'Sunyanzi+is+', !0
9 ECHO ~3
9 10 ECHO 'Sunyanzi+is+%22%24Sunyanzi%22'
10 11 INIT_STRING ~4
12 ADD_STRING ~4 ~4, 'Sunyanzi+is+%27'
13 ADD_VAR ~4 ~4, !0
14 ADD_CHAR ~4 ~4, 39
15 ECHO ~4
12 16 ECHO 'Sunyanzi'
13 17 ECHO 'Sunyanzi'
16 18 ECHO '%0A'
19 RETURN 1
20* ZEND_HANDLE_EXCEPTION
至于你的结果,或许和环境有关。。
具体关于opcodes, 可以去我的空间翻看我相关的文章
我没有研究过PHP里是怎么实现的, 但我猜是这样的:
双引号主要是编译时, PHP要去分析里面的变量.
"Sunyanzi is $Sunyanzi", 就是去分析里面$Sunyanzi, 最终可能会被转换成: 'Sunyanzi is ' . $Sunyanzi
而如果是直接写成'Sunyanzi is ' . $Sunyanzi, PHP就不用去分析, 转换了.
而上面的测试代码中, 无论循环多少次, PHP对代码的解释只有一次, 无法显示出效果.
QUOTE:
这里的单双引号不只是php的问题了,而是跟shell也有关系,php语句作为php.exe的参数传入到php程序中,参数如果没有空格连双引号都可以省略[ 本帖最后由 chrisyue 于 2008-8-19 08:42 编辑 ]
不过语法要类似
$a = $value."value";
echo $a."value";
echo 不是函数,而print是函数,echo 不能用条件来判断,而print可以
if(print($a));
这只是人家提到过,我是没有真正测试过