php中heredoc與nowdoc介紹
Heredoc技術(shù),在正規(guī)的PHP文檔中和技術(shù)書(shū)籍中一般沒(méi)有詳細(xì)講述,只是提到了這是一種Perl風(fēng)格的字符串輸出技術(shù)。但是現(xiàn)在的一些論壇程序,和部分文章系統(tǒng),都巧妙的使用heredoc技術(shù),來(lái)部分的實(shí)現(xiàn)了界面與代碼的準(zhǔn)分離,phpwind模板就是一個(gè)典型的例子。
1.以<<<End開(kāi)始標(biāo)記開(kāi)始,以End結(jié)束標(biāo)記結(jié)束,結(jié)束標(biāo)記必須頂頭寫(xiě),不能有縮進(jìn)和空格,且在結(jié)束標(biāo)記末尾要有分號(hào) 。開(kāi)始標(biāo)記和開(kāi)始標(biāo)記相同,比如常用大寫(xiě)的EOT、EOD、EOF來(lái)表示,但是不只限于那幾個(gè),只要保證開(kāi)始標(biāo)記和結(jié)束標(biāo)記不在正文中出現(xiàn)即可。
2.位于開(kāi)始標(biāo)記和結(jié)束標(biāo)記之間的變量可以被正常解析,但是函數(shù)則不可以。在heredoc中,變量不需要用連接符.或,來(lái)拼接,如下:
$v=2;
$a= <<<EOF
"abc"$v
"123"
EOF;
echo $a; //結(jié)果連同雙引號(hào)一起輸出:"abc"2 "123"
3.heredoc常用在輸出包含大量HTML語(yǔ)法d文檔的時(shí)候。比如:函數(shù)outputhtml()要輸出HTML的主頁(yè)??梢杂袃煞N寫(xiě)法。很明顯第二種寫(xiě)法比較簡(jiǎn)單和易于閱讀。
function outputhtml(){
echo "<html>";
echo "<head><title>主頁(yè)</title></head>";
echo "<body>主頁(yè)內(nèi)容</body>";
echo "</html>;
}
function outputhtml()
{
echo <<<EOT
<html>
<head><title>主頁(yè)</title></head>
<body>主頁(yè)內(nèi)容</body>
</html>
EOT;
}
outputhtml();
在heredoc中會(huì)自動(dòng)替換其中的$變量,將命令和輸入放在一塊,方便
附:heredoc和nowdoc的區(qū)別
heredoc使用 <<< EOT 的標(biāo)示符,而nowdoc使用 <<< 'EOT' 這樣的標(biāo)示符,其中nowdoc是PHP5.3引進(jìn)的新技術(shù),它包含了heredoc的語(yǔ)法,只是其中的內(nèi)容絕對(duì)不會(huì)進(jìn)行任何的轉(zhuǎn)義和解釋,是什么內(nèi)容就是什么內(nèi)容,不會(huì)解析PHP相關(guān)的內(nèi)容
heredoc中的PHP變量建議使用{$name->change()} 大括號(hào)括起來(lái),這樣可以避免一定的歧義,如果要原樣輸出可以使用傳說(shuō)中的轉(zhuǎn)義字符 \ ,轉(zhuǎn)義字符本身可以使用轉(zhuǎn)義字符進(jìn)行輸出,即 \ 這種表示方法,大括號(hào)之類的這些都需要轉(zhuǎn)義輸出。
為了保證的確可用,建議使用 heredoc 的語(yǔ)法,本身也帶有轉(zhuǎn)義,因?yàn)镻HP5.3才引進(jìn)的nowdoc語(yǔ)法,很多云托管壞境很有可能不支持導(dǎo)致歇菜。
最后強(qiáng)調(diào)下,heredoc是從PHP4.0開(kāi)始引進(jìn)的,而nowdoc語(yǔ)法則需要5.3版本,因?yàn)閔eredoc包含了nowdoc的功能,所以個(gè)人建議還是使用heredoc比較好些。
簡(jiǎn)單來(lái)說(shuō):
1、heredoc是動(dòng)態(tài)的 nowdoc是靜態(tài)的
2、heredoc類似多行的雙引號(hào) newdoc類似多行的單引號(hào)
3、heredoc是一種專門處理大段字符串的通用處理方案,而nowdoc是php為了彌補(bǔ)動(dòng)態(tài)實(shí)現(xiàn)“heredoc”的效率問(wèn)題而實(shí)現(xiàn)的“高效率”的靜態(tài)版本
相關(guān)文章
解決php的“It is not safe to rely on the system’s timezone setti
這篇文章主要介紹了解決php的“It is not safe to rely on the system’s timezone settings”問(wèn)題的方法,需要的朋友可以參考下2015-10-10Windows下的PHP安裝文件線程安全和非線程安全的區(qū)別
Windows版的PHP從版本5.2.1開(kāi)始有Thread Safe。這兩者不同在于何處?到底應(yīng)該用哪種?這里做一個(gè)簡(jiǎn)單的介紹2014-04-04PHP 用數(shù)組降低程序的時(shí)間復(fù)雜度
時(shí)間復(fù)雜度是開(kāi)發(fā)人員用來(lái)衡量應(yīng)用程序算法優(yōu)劣的主要因素??陀^地說(shuō),算法的優(yōu)劣除了和時(shí)間復(fù)雜度有關(guān),還與空間復(fù)雜度密切相關(guān)。2009-12-12php實(shí)現(xiàn)redis數(shù)據(jù)庫(kù)指定庫(kù)號(hào)遷移的方法
這篇文章主要介紹了php實(shí)現(xiàn)redis數(shù)據(jù)庫(kù)指定庫(kù)號(hào)遷移的方法,涉及對(duì)于redis數(shù)據(jù)庫(kù)的操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-01-01php使用gettimeofday函數(shù)返回當(dāng)前時(shí)間并存放在關(guān)聯(lián)數(shù)組里
這篇文章主要介紹了php使用gettimeofday函數(shù)返回當(dāng)前時(shí)間并存放在關(guān)聯(lián)數(shù)組里的方法,涉及php中g(shù)ettimeofday函數(shù)的使用技巧,需要的朋友可以參考下2015-03-03Php Mssql操作簡(jiǎn)單封裝支持存儲(chǔ)過(guò)程
沒(méi)有啥太多的功能,就是簡(jiǎn)單封裝,也沒(méi)有緩存,平時(shí)用ezSQL,但是ezSQL不支持存儲(chǔ)過(guò)程,所以這里封裝了存儲(chǔ)過(guò)程,因?yàn)樽约旱男枰?,只是做一個(gè)標(biāo)記在這里而已。2009-12-12PHP中魔術(shù)變量__METHOD__與__FUNCTION__的區(qū)別
這篇文章主要介紹了PHP中魔術(shù)變量__METHOD__與__FUNCTION__的區(qū)別,是深入學(xué)習(xí)PHP程序設(shè)計(jì)所必須掌握的概念,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-09-09PHP類的聲明與實(shí)例化及構(gòu)造方法與析構(gòu)方法詳解
這篇文章主要介紹了PHP類的聲明與實(shí)例化及構(gòu)造方法與析構(gòu)方法,結(jié)合實(shí)例形式分析了PHP面向?qū)ο箢惖穆暶髋c使用相關(guān)技巧,需要的朋友可以參考下2016-01-01