定界符文本和转义字符(参考)
定界符
定界符的语法:应该在<<<之后提供一个标识符号,然后是包含的字符串,最后是同样的的标识符结束字符串。结束标识符必须从行的第一列开始,并且后面
除了分号之外不能包含任何字符,空格以及空白制表符都不可以。同样,定界标记使用的标识符也必须遵循PHP中其他任何标签的命名规则,只能包含字母数字
下划线,而且必须以下画线或非数字字符开始。
<?php
$str= <<< EOT
此种形式就是双引号定界符, 这里是包含在定界符中的字符串,指出了定界符的一些使用时注意的事项。很重要的一点必须指出,结束标识符EOT所在的行不能包含任何其他字符。
这尤其意味着该标识符不能被缩进,而且在结束标记的分号之前和之后都不能有任何空格或制表符。
同样重要的是,要意识到在结束标识符之前的第一个字符必须是你的操纵系统中定义的换行符。如果破坏了这条规则使得结束标识符不"干净",则它
不会被视为结束标识符,php将继续寻找下去。如果在这种情况找不到合适的结束标识符,将会导致一个在脚本最后一行出现的语法错误。
EOT;
echo $str;
?>
定界符除了不能初使化类成员以外, 表现的就和双引号字符串一样, 只是没有双引号。这意味着在定界符文本中不需要转义引号, 不过仍然可以用以上列出来的
在双引号可以使用的转义符号,而且定界符中的变量也会被解析。
注意:结束标识符所在的行的分号后面为了保持"干净", 可以按"ENTER"回车键或方向键定位到下方继续输入代码, 但不能使用"space"空格键;
同样, 开始定界符后面(EOT)不能有空格, 必须按"ENTER"回车键或方向键定位到下方继续输入文本, 而"<<<"前后可以保留空格
//使用界定符输出变量
$name = "MyName";
echo <<<EOT
My name is $name.I am printing a "string"\n.
\tNow,I am printing some new line \n\r.
\tThis should print a capital 'A'
EOT;
输出结果:My name is MyName.I am printing a "string" . Now,I am printing some new line . This should print a capital 'A'
总结:
变量会解析
可以用转义字(除单引号和双引号)
在定界符文本中不需要转义引号(单引号和双引号)
转义字符 序列 含义
\n 换行(LF 或 ASCII 字符 0x0A(10))
\r 回车(CR 或 ASCII 字符 0x0D(13))
\t 水平制表符(HT 或 ASCII 字符 0x09(9))
\\ 反斜线
\$ 美元符号
\" 双引号
\[0-7]{1,3} 此正则表达式序列匹配一个用八进制符号表示的字符
\x[0-9A-Fa-f]{1,2} 此正则表达式序列匹配一个用十六进制符号表示的字符
PHP中转义字符(非打印字符)只能在php解析后, 在浏览器中查看代码才能看到效果。
换行符
换行符: unix系列用\n, windows系列用\r\n, mac用\r
PHP中可以用PHP_EOL来替代, 以提高代码的源代码级可移植性
如:
<?php
echo "one", PHP_EOL, "two", PHP_EOL, "three"; //显示结果: one two three
?>
查看源代码:
one
two
three
单引号和双引号定界符(PHP 5.3.0中加入的, 新增了单引号定界符和双引号定界符(就是定界符))
单引号定界符(Nowdoc结构): 既没有转义符, 也不能识别变量。
这种结构很适合用于嵌入PHP代码或其它大段文本而无需对其中的特殊字符进行转义;
双引号定界符(Heredoc结构):可用(识别)转义符: \\, \n, \r, \t, \$
可以识别其中的变量--但注意其识别的范围
在PHP5.3.0以后, 也可以用定界符来初始化静态变量和类的属性和常量:
理解双引号定界符就是先前的定界符:
<?php
echo <<<"FOOBAR"
Hello World!
FOOBAR;
?>
等同于
<?php
echo <<<FOOBAR
Hello World!
FOOBAR;
?>
以上两种都称为Heredoc结构, 自php5.3.0起支持初使化静态变量和类的属性和常量
<?php
//双引号定界符字符串(heredoc):
//其中可以识别的转义符有:\\(表示一个\) \n(换行) \r(回车) \t(制表符) \$
$str3 = <<<"HHHH"
这个范围的任何内容都是字符串的内容
可以随意换行,使用tab符: (这里之前有2个tab)
单双引号也可以随便用:"fafaf", 'fafa'
其中"HHHH"是自己可以任意给定的一个“字符串”而已。
下一行,必须尊照这个要求:只有该字符串本身和一个分号(;)
HHHH;
echo "\n\n<br />\n\n";
echo $str3;
//单引号定界符字符串(nowdoc):
//其中可以识别的转义符有:没有(即没有特殊表达的字符)
$str4 = <<<'mm'
这个范围的任何内容都是字符串的内容
可以随意换行,使用tab符: (这里之前有2个tab)
单双引号也可以随便用:"fafaf", 'fafa'
其中'mm'是自己可以任意给定的一个“字符串”而已。
下一行,必须尊照这个要求:只有该字符串本身和一个分号(;)
mm;
echo "\n\n<br />\n\n";
echo $str4;
?>