PHP的单引号和双引号 字符串效率


Posted in PHP onMay 27, 2009

简单的回答,显然是苍白无力的。 今天我们来做个实验,看看到底单引号和双引号有什么区别,谁快,谁慢。
测试代码如下:

<?php 
$single_quotes = 'This is a String'; 
$double_quotes = "This is a String"; 
echo $single_quotes; 
echo $double_quotes; 
$var = 'String'; 
$single_quotes_var = 'This is a '.$var; 
$double_quotes_var = "This is a $var"; 
echo $single_quotes_var; 
echo $double_quotes_var; 
$var = 'This'; 
$single_quotes_var_pre = $var . ' is a String'; 
$double_quotes_var_pre = "$var is a String"; 
echo $single_quotes_var_pre; 
echo $double_quotes_var_pre; 
?>

接下来,让我们以前文章提到过的Opcodes生成器来看看,最终我们的这段代码是怎么被执行的:
Branch analysis from position: 0 
Return found 
filename: /home/xinchen/string.php 
function name: (null) 
number of ops: 24 
compiled vars: !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 # op fetch ext return operands 
------------------------------------------------------------------------------- 
2 0 ASSIGN !0, 'This+is+a+String' 
3 1 ASSIGN !1, 'This+is+a+String' 
4 2 ECHO !0 
5 3 ECHO !1 
7 4 ASSIGN !2, 'String' 
8 5 CONCAT ~3 'This+is+a+', !2 
6 ASSIGN !3, ~3 
9 7 INIT_STRING ~5 
8 ADD_STRING ~5 ~5, 'This+is+a+' 
9 ADD_VAR ~5 ~5, !2 
10 ASSIGN !4, ~5 
11 11 ECHO !3 
12 12 ECHO !4 
14 13 ASSIGN !2, 'This' 
16 14 CONCAT ~8 !2, '+is+a+String' 
15 ASSIGN !5, ~8 
17 16 INIT_STRING ~10 
17 ADD_VAR ~10 ~10, !2 
18 ADD_STRING ~10 ~10, '+is+a+String' 
19 ASSIGN !6, ~10 
19 20 ECHO !5 
20 21 ECHO !6 
22 22 RETURN 1 
23* ZEND_HANDLE_EXCEPTION

注意第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条。

呵呵,是不是经过这样的分析,你会更清楚的了解到以后该怎么使用单引号和双引号了呢?
顺便说一句,对于不需要变量替换的纯字符串,大家都知道,因为在C/C++中,双引号才表示字符串,所以这种情况下,还是使用双引号的好。
另外对于W3C标准来说, HTML中的属性值应该是使用双引号来包含的 ,所以不要习惯了单引号,到处滥用哦

PHP 相关文章推荐
PHP.MVC的模板标签系统(四)
Sep 05 PHP
全文搜索和替换
Oct 09 PHP
PHP4实际应用经验篇(2)
Oct 09 PHP
可以在线执行PHP代码包装修正版
Mar 15 PHP
php 异常处理实现代码
Mar 10 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
Apr 14 PHP
初识PHP中的Swoole
Apr 05 PHP
PHP文字转图片功能原理与实现方法分析
Aug 31 PHP
PHP中OpenSSL加密问题整理
Dec 14 PHP
ThinkPHP框架实现FTP图片上传功能示例
Apr 08 PHP
Yii 框架使用Forms操作详解
May 18 PHP
PHP copy函数使用案例代码解析
Sep 01 PHP
php session 错误
May 21 #PHP
php print EOF实现方法
May 21 #PHP
php 方便水印和缩略图的图形类
May 21 #PHP
简单的php 验证图片生成函数
May 21 #PHP
PHP 数组入门教程小结
May 20 #PHP
php 无限级 SelectTree 类
May 19 #PHP
PHP日期时间函数的高级应用技巧
May 16 #PHP
You might like
德生PL990的分析评价
2021/03/02 无线电
PHP MemCached 高级缓存应用代码
2010/08/05 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
Jquery 动态生成表格示例代码
2013/12/24 Javascript
jquery操作cookie插件分享
2014/01/14 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
2016/04/06 Javascript
javaScript数组迭代方法详解
2016/04/14 Javascript
利用Node.js+Koa框架实现前后端交互的方法
2017/02/27 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
vue实现引入本地json的方法分析
2018/07/12 Javascript
Vue slot用法(小结)
2018/10/22 Javascript
如何为vuex实现带参数的 getter和state.commit
2019/01/04 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
python基于multiprocessing的多进程创建方法
2015/06/04 Python
Python中模块与包有相同名字的处理方法
2017/05/05 Python
python对视频画框标记后保存的方法
2018/12/07 Python
react+django清除浏览器缓存的几种方法小结
2019/07/17 Python
Python编写带选项的命令行程序方法
2019/08/13 Python
Pytorch之view及view_as使用详解
2019/12/31 Python
python 按钮点击关闭窗口的实现
2020/03/04 Python
东方电视购物:东方CJ
2016/10/12 全球购物
世界上最大的售后摩托车零配件超市:J&P Cycles
2017/12/08 全球购物
Swisse官方海外旗舰店:澳大利亚销量领先,自然健康品牌
2017/12/15 全球购物
顶撞老师检讨书
2014/02/07 职场文书
法制宣传月活动总结
2014/04/29 职场文书
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
单位工作证明书格式
2014/10/04 职场文书
毕业生银行实习自我鉴定
2014/10/14 职场文书
毕业生党员个人总结
2015/02/14 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书
2015年卫生局工作总结
2015/07/24 职场文书
教师旷工检讨书
2015/08/15 职场文书
pytorch中的model=model.to(device)使用说明
2021/05/24 Python
5种方法告诉你如何使JavaScript 代码库更干净
2021/09/15 Javascript
Python实现视频中添加音频工具详解
2021/12/06 Python