美文网首页小白学编程
谈谈PHP中的单引号和双引号

谈谈PHP中的单引号和双引号

作者: 正义的程序员 | 来源:发表于2019-07-10 22:08 被阅读0次

我们在做字符串拼接的时候,有多种方式,最常用的莫过于使用单引号和双引号拼接了,当让sprintf()也用的比较多,但每次在使用单引号和双引号时,总会纠结使用哪一种方式,不知道你们有没有纠结过,所以今天来仔细研究下。

单引号

我们先来看个单引号的例子:

$s = 'world';

echo 'hello ' . $s;  // hello world
echo 'hello $s';  // hello $s

从上面简单的例子,可以看到,使用单引号我们需要用.进行拼接,还有在单引号里面传变量的话,它会原样给你,$依然存在,php的解释器并没有做任何的加工。另外还有,如果想要在单引号中显示单引号或者\,需要使用转义(Escape Sequences),而且单引号中只支持这两种其它转义都不支持,比如\r\n, 同时,单引号中可以直接使用双引号,双引号中也可以直接显示单引号,这都不需要转义 如下:


echo '\'hello world\'';  // 'hello world'
echo 'hello \n world';  // hello \n world
echo '"hello world"';  // "hello world"

双引号

在使用双引号时,里面的变量可以被求值,


$a = ['foo','bar'];

$b = 'world';

echo "hello {$b}";  // hello world
echo "hello ${b}";  // hello world
echo "haha $a[0]";  // haha foo
echo “hello \n world”;  // 可以换行
// hello
// world

从代码美观上来看,双引号看起来要简洁很多,尤其是拼接一个长的句子时,如果再夹杂着html,那更是眼花缭乱,:

$name = 'Daniel';
$city = 'NJ';
$age = 18;

echo "hello, my name is {$name}, i come from {$city}, i am {$age} years old";
echo 'hello, my name is ' . $name . ', i come from ' . $city . ', i am ' . $age . ' years old';

同时双引号支持更多的转义字符,官网截图如下:

关于双引号和单引号这里贴一个stackoverflow上高赞的回答:


$s = "dollars";

echo 'This costs a lot of $s.'; // This costs a lot of $s.

echo "This costs a lot of $s."; // This costs a lot of dollars.

更进一步

看完了双引号和单引号的外在表现,我们再来看看它们的opcode,一窥到底。

本操作中使用的是 PHP 7.3.0版本

先来看看单引号:


$s = 'world';

echo 'hello ' . $s;  // hello world

短短两行代码,看看底层是怎么实现的:

从上面的opcode可以看出,其实很简单,先赋值,然后再拼接输出,最后return,一共执行了4个步骤,同样的操作再来看看双引号:


$s = 'world';

echo "hello $s";  // hello world

很明显可以看到,双引号执行了5步,多了NOP这一步,而且原来的CONCAT在这里变成了FAST_CONCAT,这里的NOP就是no operation的缩写,告诉计算机不要做任何操作,但是也要浪费一个时钟周期,为啥要这么做呢?🤷‍♂️

StackOverflow上的解释如下(看了依然不明所以):

还有一个疑问,单引号和双引号分别使用了CONCATFAST_CONCAT,这两个都有什么区别?如果就字面意思来看是不是后者比前者更快?如果这样那为什么单引号中不使用FAST_CONCAT有大佬知道的欢迎留言告诉我


👏欢迎大家关注我的公众号【正义的程序猿】

相关文章

  • 谈谈PHP中的单引号和双引号

    我们在做字符串拼接的时候,有多种方式,最常用的莫过于使用单引号和双引号拼接了,当让sprintf()也用的比较多,...

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

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

  • PHP面试(转自慕课网)

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

  • php Heredoc结构

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

  • PHP基础篇

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

  • PHP中的小知识点-学员石鑫

    单引号 ('') 和 双引号 ("") 的区别PHP不会检查单引号内字符串中的变量,所以采用单引号来定义字符串相当...

  • php的一些易错点

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

  • php中单双引号的区别

    关于单引号和双引号的区别和效率问题。了解的不是很清楚,一直以为PHP中单引号和双引号是互通的,直到有一天,发现单引...

  • PHP 字符串操作

    碎碎念 记录一些PHP中字符串的学习记录。 双引号和单引号的区别 双引号可以用来解析变量,单引号不解析变量。所以,...

  • 1.5 PHP字符串

    单引号和双引号的区别PHP允许我们在双引号串中直接包含字串变量。而单引号串中的内容总被认为是普通字符。 去掉字符串...

网友评论

    本文标题:谈谈PHP中的单引号和双引号

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