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 str_pad 函数用法简介
Jul 11 PHP
一些 PHP 管理系统程序中的后门
Aug 05 PHP
php面向对象全攻略 (十) final static const关键字的使用
Sep 30 PHP
phpmyadmin 3.4 空密码登录的实现方法
May 29 PHP
php数据库配置文件一般做法分享
Jul 07 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
Sep 23 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
Oct 31 PHP
PHP中异常处理的一些方法整理
Jul 03 PHP
php输出图像的方法实例分析
Feb 16 PHP
基于PHP常用文件函数和目录函数整理
Aug 17 PHP
PHP赋值的内部是如何跑的详解
Jan 13 PHP
PHP进阶学习之命名空间基本用法分析
Jun 18 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版(3)
2006/10/09 PHP
PHP实现分页的一个示例
2006/10/09 PHP
php中通过curl模拟登陆discuz论坛的实现代码
2012/02/16 PHP
php几个预定义变量$_SERVER用法小结
2014/11/07 PHP
php连接oracle数据库的核心步骤
2016/05/26 PHP
Js 获取Gridview选中行的内容操作步骤
2013/02/05 Javascript
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
使用jquery 简单实现下拉菜单
2015/01/14 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
js删除数组元素、清空数组的简单方法(必看)
2016/07/27 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
详细AngularJs4的图片剪裁组件的实例
2017/07/12 Javascript
nodejs基于WS模块实现WebSocket聊天功能的方法
2018/01/12 NodeJs
详解nuxt sass全局变量(公共scss解决方案)
2018/06/27 Javascript
浅谈Vue数据响应思路之数组
2018/11/06 Javascript
JavaScript碎片—函数闭包(模拟面向对象)
2019/03/13 Javascript
简单谈谈javascript高级特性
2019/09/04 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
2019/11/26 Javascript
vue实现购物车选择功能
2020/01/10 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
[54:53]完美世界DOTA2联赛PWL S2 GXR vs PXG 第二场 11.18
2020/11/18 DOTA
python 判断一个进程是否存在
2009/04/09 Python
Python实现子类调用父类的方法
2014/11/10 Python
Python中zipfile压缩文件模块的基本使用教程
2020/06/14 Python
python中Array和DataFrame相互转换的实例讲解
2021/02/03 Python
pytorch 中forward 的用法与解释说明
2021/02/26 Python
CSS3哪些新特性值得称赞
2016/03/02 HTML / CSS
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
冰峪沟导游词
2015/02/09 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
详解MySQL集群搭建
2021/05/26 MySQL