PHP中单双引号字符串的区别
我所学的教程中提到这个经常会在面试题中出现,建议大家背诵并多实验。
不用多说什么,还是直接拿实验例子来记录,为了方便,我直接用的宝塔(自己电脑没装环境)来新建文件one.php来实验。
1.双引号解析变量, 但是单引号不解析变量
<?php
//声明变量$mianshi
$mianshi='为了面试要背诵这个知识';
//在双引号中放变量echo会有什么效果呢?;
$str="$minashi 会不会出现呢?";
//输入echo试试!
echo $str;
?>
然后浏览器运行看到如下效果:
我们发现,双引号中间的变量($mianshi)会被执行显示,接着我们把str两边的双引号改为单引号试试:
<?php
//声明变量$mianshi;
$mianshi='为了面试要背诵这个知识';
//引用变量$mianshi;
$str='$mianshi 会不会出现呢?';
//输出echo试试;
echo $str
?>
然后刷新浏览器试试看:
发现变量$mianshi直接显示名称未显示内容,不是双引号的显示方式
所以我们可以明白:双引号执行变量, 而单引号不执行变量。
这也是一个重要的结论:
双引号需要解析变量, 因此双引号的效率没有单引号高。 我们如果为了更高的效率, 我们通常使用单引号。
2.双引号里面字符和变量的拼接
这里主要说明一下在双引号里面插入变量时,变量后面如果有英文或中文字符,它会把这个字符和变量拼接起来,视为一整个变量。可以在后面接上特殊字符,例如空格等分开。
<?php
//这里声明一个变量
$bianliang='变量';
//引用变量并且加个字符
$str="$bianliang文字世界";
//输出变量$str
echo $str;
//你会发现页面什么也没有!
?>
变量接上字符你会发现页面什么也没有显示
然后我们在变量和字符中间加入空格试试:
<?php
//这里声明一个变量
$bianliang='变量';
//引用变量并且加个字符
$str="$bianliang 文字世界";
//输出变量$str
echo $str;
//加入空格后输出什么呢?!
?>
我们尝试加入其他特殊字符试试:
<?php
//这里声明一个变量
$bianliang='变量';
//引用变量并且加个字符
$str="$bianliang!文字世界";
//输出变量$str
echo $str;
//这个又会输出什么呢!
?>
执行代码会显示的效果应该是:变量!文字世界
所以可以证实观点:
在双引号里面插入变量,变量后面如果有英文或中文字符,它会把这个字符和变量拼接起来,视为一整个变量。可以在后面接上特殊字符,例如空格等分开。
3.双引号里插入变量如果不想用空格可用大括号替代。
这个就很容易理解了,如上方的用空格隔开变量和字符,但是如果不想有空格但是还要解析变量,你可以使用大括号:{} 把变量括起来即可!
<?php
$bianliang='变量';
$str="{$bianliang}文字世界";
echo $str;
?>
如图,使用大括号,会省去特殊字符,以便于正常显示!
4.双单引号对转义字符的解析
转义字符是很多程序语言、数据格式和通信协议的形式文法的一部分。对于一个给定的字母表,一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义。因此转义字符开头的字符序列被叫做转义序列。
最常用的转义字符有:
\n 回车 \t 缩进
先简单来理解一下用处:
<?php
//声明字符串,并使用双引号
$zifu="牛牛\n羊羊\t狗狗";
echo $zifu;
?>
注意这个杠是(\)这种的而不是这种(/)
最后浏览器显示输出如下:
好像并没有什么效果,看不出来\n和\t代表什么含义,也看不出来双引号解析了\n和\t!
这个时候点击鼠标右键查看源代码,再看看效果。
可以明白:
\n在牛牛后面它给了一个回车换行的效果
\t在羊羊后面给了几个空格的效果,也就是鼠标按tab键的效果
我们将双引号改为单引号看看会怎么样:
<?php
//声明字符串,并使用双引号
$zifu='牛牛\n羊羊\t狗狗';
echo $zifu;
?>
你会发现\n和\t直接显示出来没有回车和空格的效果
所以可以得出结论:
双引号执行转义字符而单引号不执行转义字符。
5.转义字符\(反斜线的使用)
如果我们想声明一个变量abc,但是又想在变量abc声明内容里面输出一个双引号内容怎么办?
<?php
$abc="anc"def";
echo $abc
?>
如果按照上述代码来写,会报错,报错提示为:
因为字符串:“abc"def”必须写在双引号中间。而双引号中间还有一个双引号。 也就是意味着字符串声明提前结束了,在“c”处结束了。后面def",电脑不认识。
那遇到这种怎么办?那就不能输出双引号了嘛?
这种其实很简单,我们只需要把双引号的意义去掉,加个反斜线\
(计算机的专业名词叫转义字符)既可以了!
<?php
$aaa="abc\"def";
echo $aaa;
?>
你可以再执行一下上面的代码,发现不再报错了。同理可推,单引号当中要插入一个单引号显示出来的时候,也可以在单引号声明的字符串中的单引号前面加上(反斜线,转义字符),将单引号的意义(限定字符区间)去掉。
<?
$aaa='abc\'def;
echo $aaa
?>
6.双引号和单引号互插
当双引号当中插入单引号,单引号中插入变量,这个变量会被解析!
<?
$aaa="哈哈哈";
$vvv="嘿嘿嘿'$aaa'呵呵呵";
echo $vvv;
?>
执行后输出如下:
7.字符串的拼接(.)点
之前说过双引号解析变量时用空格隔离变量,或者用{}来解析变量
但是双引号没有单引号的效率高,并且当我有多个变量时怎么办?
这个时候我们需要用到(.)来拼接变量!
<?
$bb1='我是一个好学生</br>';
$bb2='我英语第一名</br>';
$bb3='我数学考倒数</br>';
echo $bb1.$bb2.$bb3;
?>
输出效果如下:
(.)点是一个神奇的胶水,我们用它来拼接字符!
8.定界符的特点
定界符:
在变量后面的等号写三个小于号(<<<),然后在<<<后面写上字符(建议英文大写字符)然后换行写上任意想写的字符,写完后,顶行。在行最开始处,再写上<<<后面的字符和分号。
<?php
$dingjie = <<<ABC
如果
非要在这个滚犊子
前
面<br />
加上一段
<i>距离的话</i>
我想说:<h1>思想有多远,你就跟我滚多远</h1>
ABC;
?>
我们来用定界符写一段代码看看:
<?
$aaa='牛逼';
$bbb='菜鸡';
$ddd=<<<AAA
你以为你
多$aaa\n
其实你\t真的
很$bbb
AAA;
echo $ddd
?>
最后输出的效果如下:
你会发现定界符里面的aaa bbb \n \t都起到效果了,不管是双引号还是单引号都可以显示!