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對這個功能也報錯,不知道是否是我配置的問題。