PHP中字串的heredoc結構和nowdoc結構

來源:互聯網
上載者:User

標籤:

最近在維護一個古老的PHP網站,沒有前背景分離,代碼看起來很吃力,上面大段大段的HTML輸出。在看的時候發現很多地方用了「<<<」這樣的符號來標記字串,好像之前學習PHP的時候,只講了單雙引號兩種表示字串的方式。今天偶然在書上看到了,這種「<<<」表示字串的方式是heredoc和nowdoc結構。

echo <<<EOT   <html>   <head><title>首頁</title></head>   <body>首頁內容</body>   </html>EOT;


一般來說,如果一段字串裡面有引號的話,我們會使用「\”」來進行轉義,PHP中單引號和雙引號都可以表示字串,因此也可以使用單引號表示字串的開始和結束。

echo '這裡的"雙引號"不用轉義';

在HTML裡面,標籤的屬性也使用了xxx=”yyy”的方式來表示。
<divid="div-id"class="div-class"></div>

在輸出大段HTML的時候,對所有雙引號進行轉義的工作量太大,而且對於維護不是很方便,經常出現引號沒對齊的錯誤。通常我們會使用單引號來表示這種大段的裡面有雙引號的字串。

不過HTML裡面,也是允許單引號表示屬性的。如果在輸出的HTML裡面存在單雙引號混用的情況,傳統的單雙引號字串會比較麻煩,因此我們使用了heredoc模式來表示字串。

echo<<<EOT   <div id="div-id"class="div-class">$content</div>EOT;

,heredoc模式相當於另外定義了一個字串結束標記EOT,在「<<<EOT」和「EOT」之間的單雙引號,都不會被當成字串開始和結束標記。這對於我們格式化輸出內容是很有用的。

heredoc的使用具有如下特點:

1、開始標記和結束標記使用相同的字串,通常以大寫字母來寫。

2、開始標記後不能出現空格或多餘的字元。

3、結束標記必須頂頭寫,不能有縮排和空格,且在結束標記末尾要有分號 。

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

在PHP5.3.0及其以後的版本中增加了nowdoc結構,其用法和heredoc相同,不同的是nowdoc類似於單引號,不會解析開始標記和結束標記之間的變數,這種結構很適合用於嵌入 PHP 代碼或其它大段文本而無需對其中的特殊字元進行轉義。

同樣的之前的例子用nowdoc結構可以表示為:

echo<<<'EOT'   <div id="div-id"class="div-class">$content</div>EOT;

和heredoc結構用法唯一的區別就是開始標記用引號包起來,這裡的$content會被原樣輸出而不會被解析成變數的值。

在使用heredoc和nowdoc結構的時候,經常會遇到如下的報錯:

Parse error: syntax error, unexpected T_SL in php

一般產生這種問題的原因是定界符之後有空格引起的,例如上面的EOT後面有空格就會報這個錯誤。處理是否有空格還有一個小技巧,就是利用編輯器的代碼提示功能,以我用的notepad++為例。

正常的代碼裡面,整個heredoc結構字串都是灰色的。


搬運自我的技術部落格:http://www.cc-lab.cn/heredocandnowdoc/


PHP中字串的heredoc結構和nowdoc結構

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.