Heredoc和Nowdoc最主要的做用就是输出大量字符串,特别是HTML的字符串,他能够避免你在使用''或""时的转译问题。php
他俩的语法规则不是很难,可是挺怪异,听说是继承于Perl风格的字符串输出技术,反正是和别的PHP代码挺不像的。html
Heredoc就像是双引号,他能够输出字符串而且识别里面的$变量,并且里面有'和"能够直接输出没必要转译。能够说方便不少,可是其自身的语言要求也很严谨,必定要仔细。spa
来看看手册对Heredoc的说明:操作系统
heredoc句法结构:<<<。在该提示符后面,要定义个标识符,而后是一个新行。接下来是字符串 自己,最后要用前面定义的标识符做为结束标志。code
结束时所引用的标识符必须在一行的开始位置, 并且,标识符的命名也要像其它标签同样遵照PHP的规则:只能包含字母、数字和下划线,而且不能用数字和下划线做为开头。orm
(要注意的是结束标识符这行除了 可能有一个分号(;)外,绝对不能包括其它字符。这意味着标识符不能缩进,分号的先后也不能有任何空白或tabs。更重要的是结束标识符的前面必须是个被本地操做系统承认的新行标签,好比在UNIX和Mac OS X系统中是\n ,而结束标识符(可能有个分号)的后面也必须跟个新行标签。 ) htm
举一个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输出中最好使用大括号{}来明确你的变量:it
<?php$name="cde";echo<<<EOT ab$namefgEOT;?> <br> <?php$name="cde";echo<<<EOT ab{$name}fg EOT;?>
输出效果如图:
第一段代码中,PHP认为你要输出的变量是$namefg因此是个空值。
就象heredoc结构相似于双引号字符串,Nowdoc结构是相似于单引号字符串的。Nowdoc结构很象heredoc结构,可是 nowdoc不进行解析操做 。 这种结构很适合用在不须要进行转义的PHP代码和其它大段文本。与SGML的 <![CDATA[ ]]> 结构是用来声明大段的不用解析的文本相似,nowdoc结构也有相同的特征。
一个nowdoc结构也用和heredocs结构同样的标记 <<<, 可是跟在后面的标志符要用单引号括起来,就像<<<'EOT'这样。heredocs结构的全部规则也一样适用于nowdoc结构,尤为是结束标志符的规则。
值得注意的Nowdoc是PHP 5.3才支持的,属于比较新的功能,并且个人Dreamweaver CS5对这个功能也报错,不知道是否是我配置的问题。