今天來講講view,視圖。。。沒瞭解之前,你可能覺得模板引擎很神奇,瞭解了之後你會覺得,原來是如此簡單。。。
對於模板引擎而言,它的原理一般是這樣,把模板引擎的語言替換成可執行檔語言,然後把變數輸出。。。
因為PHP本身就是一個良好了模板引擎,所以用原生的模板引擎是灰常方便和容易做到的。。。
index.html
| 代碼如下 |
複製代碼 |
<html> <head> <title><?php echo $title ?></title> </head> <body> <h1><?php echo $content ?></h1> <?php if( ! empty($arr)) { ?> <ul> <?php foreach($arr as $value) { ?> <li><?php echo $value ?></li> <?php } ?> </ul> <?php } ?> </body> </html>
|
想上面這樣一個html頁面,採用的就是原生的php模板引擎,伺服器在你include這個頁面時,會處理html中的PHP代碼。
你也許會問,要是我想定製範本語言可以嗎?答案當然是可以的,像我上面說的,用模板引擎的語言,只需要多做一步,就是把模板引擎的語言替換成標準的PHP語言。。。
index_2.html
| 代碼如下 |
複製代碼 |
<html> <head> <title><?php echo $title ?></title> </head> <body> <h1><?php echo $content ?></h1> <ifexist arr> <ul> <for value = arr> <li><echo value></li> <endfor> </ul> <endexist> </body> </html>
|
看看這個頁面,發現和index.html 有什麼不同嗎,沒錯,就是在迴圈那裡,我們用的不是標準的php語言,而是,按照自己的喜好,定義了幾個範本語言,一個是<ifexist xxx>這個是判斷xxx變數是否存在,而且不為空白,後面那個<for xx1=xx2>是迴圈迭代xx2變數,中間的<echo xx> 是輸出xx變數
怎麼替換成標準語言呢?這個可以使用正則替換,因為字串替換無法滿足我們需求了。
| 代碼如下 |
複製代碼 |
$pattern = array( ‘/<ifexists+(w+)>/i’, ‘/<fors+(w+)s=s(w+)>/’, ‘/<echos+(w+)>/’ ); $replacement = array( ‘<?php if( ! empty($\1)){ ?>’, ‘<?php foreach($\2 as $\1){ ?>’, ‘<?php echo $\1 ?>’ ); $content = preg_replace($pattern, $replacement, $content); $search = array(‘<endexist>’, ‘<endfor>’); $content = str_replace($search, ‘<?php } ?>’, $content);
|
上面的正則就可以幫我們把剛剛定義的標籤,轉換成標準p hp語言。。。
轉換之後是這樣,請看圖。
轉換之後可以輸出了嗎?答案是不行的,因為你擷取到html檔案的內容的時候,php就已經解釋了,那時候你還沒替換成標準的php語言,所以,你現在輸出的話,其中的php代碼就沒有執行。。。不過我們可以利用 php eval 這個函數,來強制要求執行其中的代碼。
| 代碼如下 |
複製代碼 |
$content = eval(‘ ?>’.$content); |
注意哦,要 ?>.$content 要不,php會把其中的html當成是php代碼的執行,這樣就會出錯了。。。
重新整理一下,ok,已經可以執行了~~~