美文网首页
浅谈php的单引号与双引号

浅谈php的单引号与双引号

作者: 在赤道吃冰棍儿 | 来源:发表于2019-06-27 16:33 被阅读0次

前言

一说起单引号与双引号,大家就会联想到,单引号比双引号速度快,双引号会解析内部的变量,而单引号不会等等的区别。那如果使用单双信号连接变量时,哪个更快呢?来看如下测试:

测试代码如图1:

图1

接下来让我们看这段代码是怎么被执行的:

执行命令来查看OPCode来分析:php -d vld.active=1 -d vld.execute=0 test.php

图2

图2的相关参数就不做过多讲解,详情可以参考我之前写的一篇文章php原理:vld-查看OPCode神器查看。

(1)来看OPCode(#*列为序号)的第0-3条, 可以看出在没有使用变量替换的情况下,双引号的和单引号所产生的Opcodes是一样的。

这就说明了纯字符串的时候,单双引号执行速度是一样的吗?其实不然,虽然其OPArray里的操作数一致,但执行并非只有这一步,还有词法分析(可以了解下token_get_all函数)、语法分析、编译环节。至于编译阶段,双引号和单引号的区别也是很大的, 我就举个数字来说明: 在scanning阶段, 对于双引号的词法规则有14条,而对于单引号,仅仅只有6条

(2)单引号拼接:从序号5(对应代码第9行)来看,CONCAT将字符串'This+is+a+'与变量!2(对应程序变量$var)连接,然后赋值到临时变量~10中,序号6来看,ASSIGN是将临时变量~10分配到了!3(对应程序变量$single_quotes_var)上。

(3)双引号:从序号7(对应代码第10行)来看,首先会有一个NOP空操作指令,FAST_CONCAT(与CONCAT相比,应该见名识意,更加快速的连接吧将字符串'This+is+a+'与变量!2(对应程序变量$var)连接,然后赋值到临时变量~12中,序号9来看,ASSIGN是将临时变量~12分配到了!4(对应程序变量$double_quotes_var)上。

上述来看,双引号多了一个NOP的空操作指令。以下行同理。

从这里我们可以发现,在使用双引号的情况下和使用单引号的情况下,同样的逻辑,所经历的执行确实不一样的(因为,Opcodes对于PHP来说就是最终的执行代码)。单单从生成的Opcods数量来说,就已经足以证明确实是使用单引号会快了。更何况还有在编译阶段,单双引号的词法规则不同。

经过上述的分析,是不是知道以后该怎么使用单引号和双引号了呢?

扩展:

顺便说一句,对于不需要变量替换的纯字符串,大家都知道,因为在C/C++中,双引号才表示字符串,所以这种情况下,还是使用双引号的好。

另外对于W3C标准来说, HTML中的属性值应该是使用双引号来包含的 ,所以不要习惯了单引号,到处滥用。

此文参考鸟哥的PHP的单引号和双引号这篇文章,内容有调整+自己的理解,只为能够更为白话的展现出来。

有什么问题请留言,大家一起探讨学习😊😊😊。

相关文章

  • php的一些易错点

    1.单引号与双引号的区别 一般用单引号或双引号标识一个字符串。单引号串与双引号串,在PHP中的处理是不同的。双引号...

  • 浅谈php的单引号与双引号

    前言 一说起单引号与双引号,大家就会联想到,单引号比双引号速度快,双引号会解析内部的变量,而单引号不会等等的区别。...

  • PHP基础篇

    php基础部分常见考点 1. 双引号单引号区别 双引号解释变量,单引号不解释变量 双引号里插入单引号,其中单引号里...

  • PHP面试(转自慕课网)

    PHP经典面试题目汇总(上篇) 1、双引号和单引号的区别 双引号解释变量,单引号不解释变量 双引号里插入单引号,其...

  • 2020-05-01 php 实例精通

    1,双引号与单引号的区别 2, 2_7.php 让人印象深刻 _get _post _request 3, php...

  • 【PHP】PHP内置过滤函数总结

    【PHP】PHP内置过滤函数总结 0x01 防止SQL注入 addslashes() 将 单引号(') 双引号("...

  • php Heredoc结构

    php中字符串的定义类型有三种:单引号形式,双引号形式,heredoc结构形式。 单引号形式和双引号的定义形式如下...

  • 网站性能通过哪些方面提升

    PHP技巧汇总:提高PHP性能的53个技巧 用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号...

  • PHP 三种字符串定义的区别详解

    php中定义字符串有3中形式: 单引号 双引号 heredoc和newdoc 区别 单引号不能解析变量 单引号不能...

  • linux中双引号和单引号的区别

    ''(单引号):hard quote""(双引号):soft quote 单引号与双引号都是shell中用来关闭对...

网友评论

      本文标题:浅谈php的单引号与双引号

      本文链接:https://www.haomeiwen.com/subject/hiqccctx.html