2012-06-04 71 views
0

我一直在讀一本關於Zend框架,並有這個HTML/PHP代碼段我想不通。它包含在MVC方法的意見部分:PHP代碼的工作超越PHP標籤(<?php ... ?>)

<select name="genre"> 
<?php foreach ($this->genres as $genre) { ?> 
<option value="<?php echo $genre ?>"><?php echo $genre ?></option> 
<?php } ?> 
</select> 

流派($this->genres)是指array('rock', 'r&b', 'country', 'rap', 'gospel', 'rock n roll', 'techno')

代碼運行完美,產生下拉選擇菜單,但我不明白的第二行是如何甚至是法律,更別說工作。 PHP代碼如何在封裝標籤之外工作?

回答

1

PHP是這方面的一個不尋常的(模板)語言解析器實際上認爲?><?php之間的一切,是有些怪異樣回聲,它被忽略的部分程序代碼,雖然解析器確實運行(它只是輸出它並跳過它的一部分的程序代碼)。

PHP manual

一對開始和結束標記之外的一切都會被PHP解析器允許PHP文件有混合內容忽略。這允許將PHP嵌入到HTML文檔中,例如創建模板。 (...)
(...)
這可以按預期工作,因爲當PHP解釋器碰到?>閉合標記時,它只是開始輸出它找到的任何東西(除了緊接着的新行之外 - 參見指令分離),直到它碰到另一個開口除非在條件陳述的中間,在這種情況下,口譯員將在決定什麼是跳過之前確定條件的結果。

這樣就可以用於許多事情PHP。你不能僅僅用它創建動態的HTML文件,你可以例如創建XML(儘管獲取XML頭是正確的),文本文件,CSS文件等等,只要PHP解釋器運行對於該文件,它將執行<?php?>之間的所有內容作爲程序代碼,其餘部分將按原樣輸出。

1

可以?><?php標籤之間認爲部分作爲字符串參數給echo(但不$variables或引用的解釋)。

所以<?php echo 2;?>3相當於<?php echo 2; echo 3;?>

0

它有助於記住,PHP的全稱是 「PHP:Hypertext Preprocessor的。」總之,其主要工作是生成HTML輸出。 PHP的標籤內

一切都在服務器側執行的,並根據需要產生輸出。這是添加到PHP忽略(任何PHP的標籤外,像<option value...></option>在你的情況下,一切。

你可以把它看作雖然PHP引擎打開,每次關閉它遇到一個PHP標籤。

<?php //this gets processed ?> 
This is sent as output, unchanged 
<?php // this gets processed ?> 

等。