鱼喃

听!布鲁布鲁,大鱼又在那叨叨了

PHP中的单引号与双引号有什么区别

同其他语言一样,在php中用引号括起来的部分一般是字符串,php中定义字符串可以用单引号和双引号,那么它们的区别在哪里?

介绍

先来看下以下几个语句的输出:

1
2
3
4
5
6
echo 'hello world!';
echo "hello world!";

$name='newnius';
echo 'my name is $name';
echo "my name is $name";

输出结果分别是

1
2
3
4
hello world!
hello world!
my name is $name
my name is newnius

看出区别来了吗?前一组输出一样,后一组出现了区别。这个的原因是因为 php中双引号会对其中的变量进行解析,而单引号不会

如果想要在双引号中输出变量名(不解析)应该怎么做呢?

利用转义,比如这条语句echo \"my name is \$name" 就可以原样输出而不解析为变量。

说到转义,单引号和双引号又有一些区别。

单引号只支持“\\”、“\‘”这两个分别表示反斜线、单引号的转义字符,其他的均作为字符串处理。而在双引号中,则会支持各种各样的转义,比如说“\n”表示换行等等。要表示一个单引号,需要用反斜线(\)转义,和很多其它语言一样。如果在单引号之前或字符串结尾需要出现一个反斜线,需要用两个反斜线表示。注意如果试图转义任何其它字符,反斜线本身也会被显示出来!所以通常不需要转义反斜线本身。(echo ‘\achar’ 和 echo ‘\\achar’输出是一样的)

既然“my name is $name” 与 ‘my name is ‘.$name 等价,又为什么会存在两种引号?

双引号的存在可以使得语句变得简洁,如果需要输出的语句里含有大量的变量,那利用双引号可以解析变量的特性,直接写在一个双引号里。

单引号的引入则是因为,明确告诉解析器这是纯字符串,不需要处理(除了前面说到的那两个转义字符外),这会大大加快语句执行的时间。

单引号和双引号如何选择?

一般情况下,推荐使用单引号,这会加快运行速度和避免很多意想不到的问题(比如意外被认为是变量而解析的字符串),如果的确需要包含变量,尽量使用字符串连接符“.”,仅当明确知道不会带来副作用和变量较多、用单引号会使得语句难以阅读时才不得不用双引号。

关于双引号解析变量的补充

尽管双引号在解析类似于$var 的时候不会存在什么问题,但是变量还会存在这样的形式:$var[0]、$var[0][1] 等,解析器很难知道编写者的意图,很有可能出错,一种解决方案是:用大括号括起来表示这是一个部分。(就像 {$var[0]}[1]这样,表示括号里面是一个变量,而外面的是普通字符)

总结

要想用好一门语言,就必须要理解各种语法背后的原理。