Heredoc和Nowdoc最主要的作用就是输出大量字符串,特别是HTML的字符串,他可以避免你在使用''或""时的转译问题。
他俩的语法规则不是很难,但是挺怪异,据说是继承于Perl风格的字符串输出技术,反正是和别的PHP代码挺不像的。
Heredoc就像是双引号,他可以输出字符串并且识别里面的$变量,而且里面有'和"可以直接输出不必转译。可以说方便很多,但是其自身的语言要求也很严谨,一定要仔细。
来看看手册对Heredoc的说明:
heredoc句法结构:<<<。在该提示符后面,要定义个标识符,然后是一个新行。接下来是字符串 本身,最后要用前面定义的标识符作为结束标志。
结束时所引用的标识符必须在一行的开始位置, 而且,标识符的命名也要像其它标签一样遵守PHP的规则:只能包含字母、数字和下划线,并且不能用数字和下划线作为开头。
(要注意的是结束标识符这行除了 可能有一个分号(;)外,绝对不能包括其它字符。这意味着标识符不能缩进,分号的前后也不能有任何空白或tabs。更重要的是结束标识符的前面必须是个被本地操作系统认可的新行标签,比如在UNIX和Mac OS X系统中是\n ,而结束标识符(可能有个分号)的后面也必须跟个新行标签。 )
举一个heredoc和""对比的例子:
<?phpecho"<h1>我的午餐</h1>
<font color=\"blue\">半只烤鸡</font>
<font color=\"red\">一杯酸奶</font>
<a href=\"1.html\"><font color=\"yellow\">查看更多</font></a>";?>
<?phpecho <<<EOT<h1>我的午餐</h1>
<font color="blue">半只烤鸡</font>
<font color="red">一杯酸奶</font>
<a href="1.html"><font color="yellow">查看更多</font></a>EOT;?>
输出效果如图:
值得注意的是犹豫PHP的贪婪模式在Heredoc输出中最好使用大括号{}来明确你的变量:
<?php$name="cde";echo<<<EOT
ab$namefgEOT;?>
<br>
<?php$name="cde";echo<<<EOT
ab{$name}fg
EOT;?>
输出效果如图:
第一段代码中,PHP认为你要输出的变量是$namefg所以是个空值。
Nowdoc结构
就象heredoc结构类似于双引号字符串,Nowdoc结构是类似于单引号字符串的。Nowdoc结构很象heredoc结构,但是 nowdoc不进行解析操作 。 这种结构很适合用在不需要进行转义的PHP代码和其它大段文本。与SGML的 <![CDATA[ ]]> 结构是用来声明大段的不用解析的文本类似,nowdoc结构也有相同的特征。
一个nowdoc结构也用和heredocs结构一样的标记 <<<, 但是跟在后面的标志符要用单引号括起来,就像<<<'EOT'这样。heredocs结构的所有规则也同样适用于nowdoc结构,尤其是结束标志符的规则。
值得注意的Nowdoc是PHP 5.3才支持的,属于比较新的功能,而且我的Dreamweaver CS5对这个功能也报错,不知道是不是我配置的问题。
来源:oschina
链接:https://my.oschina.net/u/1773287/blog/368745