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之对抗Web扫描器的脚本技巧
Oct 01 PHP
解析thinkphp中的导入文件标签
Jun 20 PHP
php 获取页面中指定内容的实现类
Jan 23 PHP
Laravel框架路由配置总结、设置技巧大全
Sep 03 PHP
Yii入门教程之Yii安装及hello world
Nov 25 PHP
PHP实现即时输出、实时输出内容方法
May 27 PHP
php使用GD实现颜色渐变实例
Jun 02 PHP
php htmlentities()函数的定义和用法
May 13 PHP
php单链表实现代码分享
Jul 04 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
Dec 29 PHP
php实现的redis缓存类定义与使用方法示例
Aug 09 PHP
php查询内存信息操作示例
May 09 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中定时计划任务的实现原理
2013/01/08 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
2015/04/15 PHP
使用php+swoole对client数据实时更新(一)
2016/01/07 PHP
php多进程并发编程防止出现僵尸进程的方法分析
2020/02/28 PHP
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
Jquery实现自定义窗口随意的拖拽
2014/03/12 Javascript
JS判断是否在微信浏览器打开的简单实例(推荐)
2016/08/24 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
vue.js学习之UI组件开发教程
2017/07/03 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
2018/12/06 Javascript
微信小程序转化为uni-app项目的方法示例
2020/05/22 Javascript
基于python的字节编译详解
2017/09/20 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
transform python环境快速配置方法
2018/09/27 Python
Python数据可视化之画图
2019/01/15 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
python如何将两个txt文件内容合并
2019/10/18 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
使用Bazel编译TensorBoard教程
2020/02/15 Python
html5中canvas学习笔记2-判断浏览器是否支持canvas
2013/01/06 HTML / CSS
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
纽约复古灵感的现代珠宝品牌:Lulu Frost
2018/03/03 全球购物
环境科学专业研究生求职信
2013/10/02 职场文书
自荐信格式技巧有哪些呢
2013/11/19 职场文书
公司寄语大全
2014/04/10 职场文书
《红军不怕远征难》教学反思
2014/04/14 职场文书
工商局所长四风自我剖析及整改措施
2014/10/26 职场文书
还款承诺书范本
2015/01/20 职场文书
家长会感言
2015/08/01 职场文书
清洁工工作总结
2015/08/11 职场文书
教学副校长工作总结
2015/08/13 职场文书
村官2015年度工作总结
2015/10/14 职场文书
php双向队列实例讲解
2021/11/17 PHP
阿里云 Windows server 2019 配置FTP
2022/04/28 Servers