· 作者:laruence(http://www.laruence.com/)
· 本文地址: http://www.laruence.com/2008/08/19/338.html
· 转载请注明出处
经常有人问我,听说在PHP中处理字符串用单引号会快,那么如果存在变量替换的时候,是使用单引号连接快呢,还是双引号快呢? 简单的回答,显然是苍白无力的。 今天我们来做个实验,看看到底单引号和双引号有什么区别,谁快,谁慢。
测试代码如下:
接下来,让我们以前文章提到过的Opcodes生成器来看看,最终我们的这段代码是怎么被执行的:注意第0到第3条op line, 可以看出在没有使用变量替换的情况下,双引号的和单引号所产生的Opcodes是一样的。
再来看:第4到第12条, 可以发现,在使用变量替换的情况下,使用双引号和单引号所生成的Opcodes是不一样的,我们来分析双引号情况下的Opcodes:
7 INIT_STRING 初始化一个字符串变量,存放在~5临时变量中。
8 ADD_STRING 将第一部分字符串写入。
9 ADD_VAR 将变量替换的字符串写入。
第16-28行同理。
从这里我们可以发现,在使用双引号的情况下和使用单引号的情况下,同样的逻辑,所经历的执行确实不一样的(因为,Opcodes对于PHP来说就是最终的执行代码)。单单从生成的Opcods数量来说,就已经足以证明确实是使用单引号会快了。
至于编译阶段,双引号和单引号的区别也是很大的, 我就举个数字来说明: 在scanning阶段, 对于双引号的词法规则有14条,而对于单引号,仅仅只有6条。
呵呵,是不是经过这样的分析,你会更清楚的了解到以后该怎么使用单引号和双引号了呢?
顺便说一句,对于W3C标准来说, HTML中的属性值应该是使用双引号来包含的 ,所以不要习惯了单引号,到处滥用哦。
[ 本帖最后由 七月十五 于 2008-11-9 10:26 编辑 ]
培训新闻
- 北京隆重推出“先就业,后付费”,LAMP就业班...
- 青岛PHPChina培训中心第二期就业寒假班热招
- 唐山PHPChina授权培训中心首期就业班开始热招...
- 广州多迪,零起点,四个月培养高级工程师,包...
- 大连开沅教育(PHP大连中心)12月LAMP项目实...
- 济南第九期LAMP实训就业班冬节火热报名中
- 西安PCTI-5期业余班热招中......
- 上海LAMP一期实战精英班11月27日开班啦~~~~~...
热点专题
网站特别推荐
- LAMP兄弟连最新开班报道
- 北京隆重推出“先就业,后付费”,LAMP就业班...
- 青岛PHPChina培训中心第二期就业寒假班热招
- 唐山PHPChina授权培训中心首期就业班开始热招...
- 广州多迪,零起点,四个月培养高级工程师,包...
- PHP考试认证问题
- 大连开沅教育(PHP大连中心)12月LAMP项目实...
- 福州厦门什么时候有开培训班
- 济南第九期LAMP实训就业班冬节火热报名中
- 西安PCTI-5期业余班热招中......
社区精华
- alee简说OOP插件机制 < 未完待续 >
- mutou_wu我说PHPer的水平区分
- leehui1983MYSQL开发实用知识集合(暂告一段落...
- laruence深入理解PHP原理之文件上传
- peacock【重点推荐】一款专业级Web开发工具






最新回复
代码看不懂,没有看明白你说什么.Opcods什么的都不知道
没有使用变量替换的情况下,双引号的和单引号用那个?
有变量的情况下用那个?
都有的情况下用那个?
QUOTE:
PHP执行代码会经过如下4个步骤(确切的来说,应该是PHP的语言引擎Zend1.
Scanning(Lexing) ,将PHP代码转换为语言片段(Tokens)
2.
Parsing, 将Tokens转换成简单而有意义的表达式
3.
Compilation, 将表达式编译成Opocdes
4.
Execution, 顺次执行Opcodes,每次一条,从而实现PHP脚本的功能。
生成的Opocdes代码量越少,执行相对就越快
麻烦给说下 我上面的三个问题 就用"单"和"双",一共三个字就ok 了
QUOTE:
前面的词语都不懂简单点就是,尽量使用单引号
来一个
echo '我是一个'. $china.'中国人';
其中$china=大大地好的
看来现在写编译器都是定义个语法,自动生成分析器了啊
[ 本帖最后由 leric 于 2008-8-21 00:48 编辑 ]