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函数解决SQL injection
Dec 09 PHP
PHP实现生成唯一编号(36进制的不重复编号)
Jul 01 PHP
php保存二进制原始数据为图片的程序代码
Oct 14 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
Nov 17 PHP
详谈PHP编码转换问题
Jul 28 PHP
浅析php设计模式之数据对象映射模式
Mar 03 PHP
使用ltrace工具跟踪PHP库函数调用的方法
Apr 25 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
Jul 09 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
Oct 17 PHP
PHP实现实时生成并下载超大数据量的EXCEL文件详解
Oct 23 PHP
基于Laravel-admin 后台的自定义页面用法详解
Sep 30 PHP
PHP与SQL语句写一句话木马总结
Oct 11 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
PL-880隐藏功能
2021/03/01 无线电
基于PHPExcel的常用方法总结
2013/06/13 PHP
PHP数组排序函数合集 以及它们之间的联系分析
2013/06/27 PHP
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
浅谈javascript的数据类型检测
2010/07/10 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
纯JavaScript实现HTML5 Canvas六种特效滤镜示例
2013/06/28 Javascript
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
jquery序列化表单去除指定元素示例代码
2014/04/10 Javascript
网页右下角弹出窗体实现代码
2014/06/05 Javascript
javascript中键盘事件用法实例分析
2015/01/30 Javascript
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
JavaScript 有用的代码片段和 trick
2018/02/22 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
2018/02/26 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
vscode下的vue文件格式化问题
2018/11/28 Javascript
微信小程序入门之广告条实现方法示例
2018/12/05 Javascript
vue-resource post数据时碰到Django csrf问题的解决
2020/03/13 Javascript
基于VUE实现判断设备是PC还是移动端
2020/07/03 Javascript
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
手动实现把python项目发布为exe可执行程序过程分享
2014/10/23 Python
使用Python读写文本文件及编写简单的文本编辑器
2016/03/11 Python
python实现高斯判别分析算法的例子
2019/12/09 Python
Python用input输入列表的实例代码
2020/02/07 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
CSS3中伪元素::before和::after的用法示例
2017/09/18 HTML / CSS
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
俄罗斯在线水暖商店:Perfecto.ru
2019/10/25 全球购物
验房委托书
2014/08/30 职场文书
党员个人剖析材料
2014/09/30 职场文书
2014幼儿园教师个人工作总结
2014/11/08 职场文书
培根随笔读书笔记
2015/07/01 职场文书
2019年大学生职业生涯规划书最新范文
2019/03/25 职场文书