同其他语言一样,在php中用引号括起来的部分一般是字符串,php中定义字符串可以用单引号和双引号,那么它们的区别在哪里?
介绍
先来看下以下几个语句的输出:
1 | echo 'hello world!'; |
输出结果分别是
1 | hello world! |
看出区别来了吗?前一组输出一样,后一组出现了区别。这个的原因是因为 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]这样,表示括号里面是一个变量,而外面的是普通字符)
总结
要想用好一门语言,就必须要理解各种语法背后的原理。