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+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
Jul 15 PHP
PHP删除非空目录的函数代码小结
Feb 28 PHP
PHP的error_reporting错误级别变量对照表
Jul 08 PHP
PHP中比较时间大小实例
Aug 21 PHP
php程序总是提示验证码输入有误解决方案
Jan 07 PHP
PHP简单获取视频预览图的方法
Mar 12 PHP
php找出指定范围内回文数且平方根也是回文数的方法
Mar 23 PHP
PHP 二维数组和三维数组的过滤
Mar 16 PHP
php生成网页桌面快捷方式
May 05 PHP
浅谈Laravel队列实现原理解决问题记录
Aug 19 PHP
Laravel等框架模型关联的可用性浅析
Dec 15 PHP
PHP常用header头定义代码示例汇总
Aug 29 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
用PHP和ACCESS写聊天室(七)
2006/10/09 PHP
PHP封装分页函数实现文本分页和数字分页
2014/10/23 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
PHP 爬取网页的主要方法
2018/07/13 PHP
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
2010/04/27 Javascript
js 分页全选或反选标识实现代码
2011/08/09 Javascript
json2.js的初步学习与了解
2011/10/06 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
2013/10/11 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
javascript实现获取浏览器版本、浏览器类型
2015/12/02 Javascript
在WordPress中加入Google搜索功能的简单步骤讲解
2016/01/04 Javascript
全面解析多种Bootstrap图片轮播效果
2016/05/27 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
ng-options和ng-checked在表单中的高级运用(推荐)
2017/01/21 Javascript
JSONP跨域请求
2017/03/02 Javascript
ES6新特性:使用export和import实现模块化详解
2017/07/31 Javascript
JS严格模式原理与用法实例分析
2020/04/27 Javascript
JS实现页面鼠标点击出现图片特效
2020/08/19 Javascript
通过实例解析js可枚举属性与不可枚举属性
2020/12/02 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
[51:06]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS Liquid
2018/03/30 DOTA
跟老齐学Python之传说中的函数编写条规
2014/10/11 Python
Python实现的插入排序算法原理与用法实例分析
2017/11/22 Python
Python 中字符串拼接的多种方法
2018/07/30 Python
Django框架自定义session处理操作示例
2019/05/27 Python
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
Avène雅漾美国官方网站:敏感肌肤护理专家
2016/10/24 全球购物
巴西葡萄酒销售网站:Wine.com.br
2017/11/07 全球购物
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
给排水专业应届生求职信
2013/10/12 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
单位介绍信格式
2015/01/31 职场文书
市场部岗位职责范本
2015/04/15 职场文书
公司停电通知
2015/04/15 职场文书
运动会表扬稿范文
2015/05/05 职场文书