php中单引号,双引号的区别和执行效率

  在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中的属性值应该是使用双引号来包含的 ,所以不要习惯了单引号,到处滥用哦 转载

  http://bbs.tianya.cn/post-stocks-1721824-1.shtml

  http://bbs.tianya.cn/post-stocks-1721829-1.shtml

  http://bbs.tianya.cn/post-stocks-1721831-1.shtml

时间: 2024-11-03 15:15:06

php中单引号,双引号的区别和执行效率的相关文章

JS中单引号/双引号以及外部js引入的一些问题

一.单引号和双引号的用法的问题 在JavaScript中可以使用单引号.双引号,二者也可以混合使用.但是,身为菜鸟的我,却碰到了一些引号的使用问题. <body> <div style="border:1px solid red; height:150px;width:150px;" onclick="alert("test");" id="test">This is a test. </div&

Linux中的元字符和转义符 单引号 硬引号 双引号 软引号

Linux中的元字符和转义符  单引号  硬引号  双引号  软引号 Linux就这个范儿 Linux就这个范儿 P182单引号:硬引号,所有元字符特殊意义都会关掉双引号:软引号,只允许出现特定元字符,对特殊字符会进行解析 元字符

php echo输出html标签时但引号双引号交替使用技巧

如<dt onClick='subtest("test")'>这里面会有引号交替,如果仅仅简单的使用<?php echo "<dt onClick='showHide("items2_1")'>";?>肯定会报错的.用下面办法就可以解决,在引号前面加反斜杠用来区分: <?php echo "<dt onClick='showHide(\"items2_1\")'>

Linux Shell中反引号``, 单引号&#39;&#39;, 双引号&quot;&quot;, $混用总结

用一个小程序(argv.py)来演示下: #!/usr/local/bin/python3 import sys print('sys.argv has these', len(sys.argv), 'elements:', sys.argv) 运行与结果: # 首先是赋予执行权限 chmod 755 argv.py #1 一个空格一个命令行参数 ./argv.py I love Shell scripting. sys.argv has these 5 elements: ['./argv.p

python脚本中单引号’ 双引号“ 三个单引号‘’‘ 三个双引号”“” 差别 及反斜杠的用法

直接说结果,然后去理解 双引号内不用加反斜杠 单引号内必须加反斜杠 三单引号输入换行需要加单引号 三双引号最为完美,换行转义什么都不用加 参考:python3中单引号,双引号,三个单引号 ,三个双引号的差别,以及反斜杠的用法python单引号(').双引号(").三引号(''',""")Python中单引号,双引号,3个单引号及3个双引号的区别 原文地址:http://blog.51cto.com/weiruoyu/2333560

PHP中单引号双引号使用原则

1.PHP中尽量用单引号,HTML代码全部用双引号 2.在包含变量的时候,用双引号可以简化操作 3.复杂的情况下用大括号包起来 4 PHP引号还有一个用处就是,有的时候需要用php生成文本文件,换行符\n需要用双引号才能好使,单引号则会直接把\n当成字符输出.

python中单引号, 双引号,三引号的差异

1. 单引号和双引号用法都是一样的,但是如果字符串里有相同的字符时要使用\进行转义 举例:1) print 'hello'2) print "hello"1和2,结果都是hello 3) print 'hell\'o'4) print "hell'o"3和4,结果都是hell'o 5) print 'hell"o'6) print "hell\"o"5和6,结果都是hell"o 2. 三引号与他们不同之处:“所见即所

【VC++】换行符,回车,单引号,双引号,斜杠\,退格

VC++ 换行符.回车.单引号.双引号.退格.跳格.斜杠\.特殊字符功能详解,\r\n = chr(13)+chr(10),VC++ \n 换行符号,VC++ \n 换行符,VC++ 换行符号,VC++ \n 换行,VC++ \n 符号,VC++ 换行符,VC++ 换行,VC++ \n,VC++ \n 换下一行,VC++ \n 换下行,VC++ \n 换一行,VC++ \n 下一行,VC++ 换下一行,VC++ \n 下行,VC++ 换下行,VC++ 换一行,VC++ 下一行,VC++ 下行,\

PHP json字符串对特殊字符处理(单引号,双引号)

前言:form表单用POST,GET等方式提交数据到后台,后台用PHP接收 提交的数据含有 """."'","\"(双引号,单引号,反斜线),新版PHP(magic_quotes_gpc 在php.ini 设置为ON时,自动addslashes()进行转义.5.3废弃,5.4移除,都需要自己用addslashes()进行转义)都需要自己用addslashes()添加转义. PHP接受的form表单提交过来的数据,需先用stripcsla