一、定义方式
单引号/ 双引号 / heredoc 和 newdoc;(三种)
1、 单引号
// 单引号定义变量
$str = 'a b c d e f $a g'; // 此时$a会被原样输出
2、 双引号
// 此处可以把 '{$a}' 换成特殊字符,如 & $a &
// 原因:单引号的执行效率更高,且将name放到外面可读性更强。
$str = "a b c d e f '{$a}' g h"; // a b c d e f $a的值 g h
注:双引号中包含单引号,单引号中包含变量,该变量是会被解析的,因为最外层是双引号,且里面的单引号会被原样输出.
使用场景:一般会用于sql语句
不推荐写法:
$sql = "SELECT * FROM user WHERE name = '$name'"
;
推荐写法:$sql = 'SELECT * FROM user WHERE name = \''.$name.'\''
;
3、 heredoc
- 开头和结尾的名字保持一致;
- 结尾要放到一行的开头(前面不可以有任何字符,包括空格)【适用于超长的内容】;
- 功能与双引号一致;
$str = <<<EoT
.
. // 内容可以为字符串,可以写变量、转义字符等,都可以被解析(功能与双引号一致)
.
.
EoT;
4、 newdoc
- 开头和结尾名字要保持一致,且定界符处用单引号括起来;
- 结尾要放到一行的开头(前面不可以有任何字符,包括空格)【适用于超长的内容】;
- 功能与单引号一致
// newdoc
$str = <<<'EoT'
.
.
.
.
EoT;
二、区别
- 单引号:
- (1) 单引号不能解析变量;
- (2) 单引号不能解析转义字符,只能解析单引号和反斜杠本身;
- (3) 变量和变量、变量和字符串、字符串和字符串之间可以用.连接;
- (4) 单引号的效率更高;
- 双引号:
- (1) 双引号可以解析变量,变量可以使用特殊字符和{}包含;
- (2) 双引号可以解析所有转义字符;
- (3) 也可以使用.来连接;
- heredoc 和 newdoc:
- (1) heredoc 功能类似于 双引号;
- (2) newdow 功能类似于 单引号;
- (3) 两者都是用来处理大文本。