PHP 標(biāo)記
當(dāng)解析一個(gè)文件時(shí),PHP 會(huì)尋找起始和結(jié)束標(biāo)記,也就是<?php 和 ?>,這告訴PHP 開(kāi)始和停止解析二者之間的代碼。此種解析方式使得 PHP 可以被嵌入到各種不同的文檔中去,而任何起始和結(jié)束標(biāo)記之外的部分都會(huì)被 PHP 解析器忽略。
PHP 也允許使用短標(biāo)記 <? 和 ?>,但不鼓勵(lì)使用。只有通過(guò)激活php.ini中的 short_open_tag 配置指令或者在編譯 PHP 時(shí)使用了配置選項(xiàng) --enable-short-tags 時(shí)才能使用短標(biāo)記。
如果文件內(nèi)容是純 PHP 代碼,最好在文件末尾刪除 PHP 結(jié)束標(biāo)記。這可以避免在 PHP 結(jié)束標(biāo)記之后萬(wàn)一意外加入了空格或者換行符,會(huì)導(dǎo)致 PHP 開(kāi)始輸出這些空白,而腳本中此時(shí)并無(wú)輸出的意圖。
// 腳本至此結(jié)束,并無(wú) PHP 結(jié)束標(biāo)記
從 HTML 中分離
凡是在一對(duì)開(kāi)始和結(jié)束標(biāo)記之外的內(nèi)容都會(huì)被 PHP 解析器忽略,這使得 PHP 文件可以具備混合內(nèi)容。 可以使 PHP 嵌入到 HTML 文檔中去,如下例所示。
這將如預(yù)期中的運(yùn)行,因?yàn)楫?dāng) PHP 解釋器碰到 ?> 結(jié)束標(biāo)記時(shí)就簡(jiǎn)單地將其后內(nèi)容原樣輸出(除非馬上緊接換行 - 見(jiàn)指令分隔符)直到碰到下一個(gè)開(kāi)始標(biāo)記;例外是處于條件語(yǔ)句中間時(shí),此時(shí) PHP 解釋器會(huì)根據(jù)條件判斷來(lái)決定哪些輸出,哪些跳過(guò)。見(jiàn)下例。
使用條件結(jié)構(gòu):
Example #1 使用條件的高級(jí)分離術(shù)
上例中 PHP 將跳過(guò)條件語(yǔ)句未達(dá)成的段落,即使該段落位于 PHP 開(kāi)始和結(jié)束標(biāo)記之外。由于 PHP 解釋器會(huì)在條件未達(dá)成時(shí)直接跳過(guò)該段條件語(yǔ)句塊,因此 PHP 會(huì)根據(jù)條件來(lái)忽略之。
要輸出大段文本時(shí),跳出 PHP 解析模式通常比將文本通過(guò) echo 或 print 輸出更有效率。
可以在 PHP 中使用四對(duì)不同的開(kāi)始和結(jié)束標(biāo)記。其中兩種,<?php ?> 和 <script language="php"> </script> 總是可用的。另兩種是短標(biāo)記和 ASP 風(fēng)格標(biāo)記,可以在php.ini配置文件中打開(kāi)或關(guān)閉。盡管有些人覺(jué)得短標(biāo)記和 ASP 風(fēng)格標(biāo)記很方便,但移植性較差,通常不推薦使用。
Note:
此外注意如果將 PHP 嵌入到 XML 或 XHTML 中則需要使用 <?php ?> 標(biāo)記以保持符合標(biāo)準(zhǔn)。
Example #2 PHP 開(kāi)始和結(jié)束標(biāo)記
上例中的 1 和 2 中使用的標(biāo)記總是可用的,其中示例 1 中是最常用,并建議使用的。
短標(biāo)記(上例 3)僅在通過(guò)php.ini配置文件中的指令 short_open_tag 打開(kāi)后才可用,或者在 PHP 編譯時(shí)加入了 --enable-short-tags 選項(xiàng)。
ASP 風(fēng)格標(biāo)記(上例 4)僅在通過(guò)php.ini配置文件中的指令 asp_tags 打開(kāi)后才可用。
Note:
在以下情況應(yīng)避免使用短標(biāo)記:開(kāi)發(fā)需要再次發(fā)布的程序或者庫(kù),或者在用戶不能控制的服務(wù)器上開(kāi)發(fā)。因?yàn)槟繕?biāo)服務(wù)器可能不支持短標(biāo)記。為了代碼的移植及發(fā)行,確保不要使用短標(biāo)記。
Note:
在 PHP 5.2 和之前的版本中,解釋器不允許一個(gè)文件的全部?jī)?nèi)容就是一個(gè)開(kāi)始標(biāo)記 <?php。自 PHP 5.3 起則允許此種文件,但要開(kāi)始標(biāo)記后有一個(gè)或更多白空格符。
Note:
自 PHP 5.4 起,短格式的 echo 標(biāo)記 <?= 總會(huì)被識(shí)別并且合法,而不管 short_open_tag 的設(shè)置是什么。
指令分隔符
同 C 或 Perl 一樣,PHP 需要在每個(gè)語(yǔ)句后用分號(hào)結(jié)束指令。一段 PHP 代碼中的結(jié)束標(biāo)記隱含表示了一個(gè)分號(hào);在一個(gè) PHP 代碼段中的最后一行可以不用分號(hào)結(jié)束。如果后面還有新行,則代碼段的結(jié)束標(biāo)記包含了行結(jié)束。
Note:
文件末尾的 PHP 代碼段結(jié)束標(biāo)記可以不要,有些情況下當(dāng)使用 include 或者 require 時(shí)省略掉會(huì)更好些,這樣不期望的空白符就不會(huì)出現(xiàn)在文件末尾,之后仍然可以輸出響應(yīng)標(biāo)頭。在使用輸出緩沖時(shí)也很便利,就不會(huì)看到由包含文件生成的不期望的空白符。
注釋
PHP 支持 C,C++ 和 Unix Shell 風(fēng)格(Perl 風(fēng)格)的注釋。例如:
單行注釋僅僅注釋到行末或者當(dāng)前的 PHP 代碼塊,視乎哪個(gè)首先出現(xiàn)。這意味著在 // ... ?> 或者 # ... ?> 之后的 HTML 代碼將被顯示出來(lái):?> 跳出了 PHP 模式并返回了 HTML 模式,// 或 # 并不能影響到這一點(diǎn)。如果啟用了 asp_tags 配置選項(xiàng),其行為和 // %> 或 # %> 相同。不過(guò),</script> 標(biāo)記在單行注釋中不會(huì)跳出 PHP 模式。
C 風(fēng)格的注釋在碰到第一個(gè) */ 時(shí)結(jié)束。要確保不要嵌套 C 風(fēng)格的注釋。試圖注釋掉一大塊代碼時(shí)很容易出現(xiàn)該錯(cuò)誤。