heredoc和nowdoc的區別

多次使用 php nowdoc HereDoc 插入大量Hmtl都沒有成功,一樣提示語法有問題,事實上PHP手冊註明是這樣寫的,實在很奇怪
                
最後發現了問題所在,原來這類文檔在結束時,一定要靠近行的第一位,就是說EOF前面不能有空格,而爲了代碼縮進,正好產生了這樣的問題.
代碼如下:
$str = <<<'EOD'
Example of string
spanning multiple lines
using nowdoc syntax.
EOD;//EOD一定要靠近前面,不能有空格,同時不要漏掉結束符分號;

附:heredoc和nowdoc的區別
heredoc使用 <<< EOT 的標示符,而nowdoc使用 <<< 'EOT' 這樣的標示符,其中nowdoc是PHP5.3引進的新技術,它包含了heredoc的語法,只是其中的內容絕對不會進行任何的轉義和解釋,是什麼內容就是什麼內容,不會解析PHP相關的內容
heredoc中的PHP變量建議使用{$name->change()} 大括號括起來,這樣可以避免一定的歧義,如果要原樣輸出可以使用傳說中的轉義字符 \ ,轉義字符本身可以使用轉義字符進行輸出,即 \ 這種表示方法,大括號之類的這些都需要轉義輸出。
爲了保證的確可用,建議使用 heredoc 的語法,本身也帶有轉義,因爲PHP5.3才引進的nowdoc語法,很多雲託管壞境很有可能不支持導致歇菜。
最後強調下,heredoc是從PHP4.0開始引進的,而nowdoc語法則需要5.3版本,因爲heredoc包含了nowdoc的功能,所以個人建議還是使用heredoc比較好些。



                      

Heredoc技術,在正規的PHP文檔中和技術書籍中一般沒有詳細講述,只是提到了這是一種Perl風格的字符串輸出技術。但是現在的一些論壇程序,和部分文章系統,都巧妙的使用heredoc技術,來部分的實現了界面與代碼的準分離,phpwind模板就是一個典型的例子。

如下: <?php $name = '淺水遊'; print <<<EOT

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>Untitled Document</title> </head> <body> <!--12321--> Hello,$name! </body> </html>

EOT; ?>

1.以<<<End開始標記開始,以End結束標記結束,結束標記必須頂頭寫,不能有縮進和空格,且在結束標記末尾要有分號 。開始標記和開始標記相同,比如常用大寫的EOT、EOD、EOF來表示,但是不只限於那幾個,只要保證開始標記和結束標記不在正文中出現即可

2.位於開始標記和結束標記之間的變量可以被正常解析,但是函數則不可以。在heredoc中,變量不需要用連接符.或,來拼接,如下:

$v=2; $a= <<<EOF "abc"$v "123" EOF; echo $a; //結果連同雙引號一起輸出:"abc"2 "123"

3.heredoc常用在輸出包含大量HTML語法d文檔的時候。比如:函數outputhtml()要輸出HTML的主頁。可以有兩種寫法。很明顯第二種寫法比較簡單和易於閱讀。

function outputhtml(){ echo "<html>"; echo "<head><title>主頁</title></head>"; echo "<body>主頁內容</body>"; echo "</html>; }

function outputhtml() { echo <<<EOT    <html>    <head><title>主頁</title></head>    <body>主頁內容</body>    </html> EOT; }

outputhtml();

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章