PHP中使用引号的一般规则是:
单引号引用的内容将按照字面表达原样引用;
双引号引用的内容将需要做推断处理。
规则很简单,然而使用时还是会有一些困惑。
下面这段代码尝试理清这两者的微妙关系:
<?php
$_firstName = ‘Michael‘;
$_lastName = "Jackson";
//建立两个变量,因为都是字符串型,赋值使用单引号或双引号没有区别。
$_name1 = ‘$_firstName $_lastName‘;
$_name2 = "$_firstName $_lastName";
//拼接之前建立的变量得到两个新的变量,此时单引号和双引号将出现不同的处理结果:
//$_name1 的值会是 $_1stName $_2ndName;
//$_name2 的值则会是 Michael Jackson。
print "打印双引号中内容: The name is $_name1 or The name is $_name2<br />";
print ‘打印单引号中内容: The name is $_name1 or The name is $_name2‘;
//打印变量值,print语句中的单引号和双引号再次显示出处理结果的不同。
?>
执行这段代码在浏览器中显示的结果是这样的:
打印双引号中内容: The name is $_firstName $_lastName or The name is Michael Jackson
打印单引号中内容: The name is $_name1 or The name is $_name2
到这里并不难理解,但有趣的是引号可以嵌套,双引号中嵌单引号或单引号中嵌双引号一般都没什么问题;双引号中嵌双引号或单引号中嵌单引号也是可以的,只是内嵌的引号要被转义;而且,内嵌的引号并不会影响一般性处理规则。
修改以上代码如下:
<?php
$_firstName = ‘Michael‘;
$_lastName = "Jackson";
$_name1 = ‘$_firstName $_lastName‘;
$_name2 = "$_firstName $_lastName";
print "打印双引号中内容: The name is ‘$_firstName $_lastName‘ or The name is ‘$_name2‘<br />";
print ‘打印单引号中内容: The name is "$_name1" or The name is "$_name2" ‘;
?>
执行这段代码在浏览器中显示的结果是这样的:
打印双引号中内容: The name is ‘Michael Jackson‘ or The name is ‘Michael Jackson‘
打印单引号中内容: The name is "$_name1" or The name is "$_name2"
可以看到双引号中嵌入单引号并不会影响对单引号中变量值的推断,单引号中嵌入双引号也不会出现新的推断,内嵌的引号都是照原样处理。
然后又有一个例外,在引用关联索引的数组元素时,双引号内嵌的单引号会触发解析错误,比如以下语句:
print "The element is $_array[‘index‘]";
一个常用的解决办法是用花括号将数组结构封装起来:
print "The element is {$_array[‘index‘]}";
原文:https://www.cnblogs.com/riverman/p/12802789.html