1. 程式人生 > >論PHP模板的簡單高效實現

論PHP模板的簡單高效實現

PHP

大家都知道PHP是世界上最好的語言,PHP在項目開發中的靈活性是個非常重要的優點,非常適合經常變動的業務邏輯和頁面內容,當然都離不開一個好用的模板引擎,市面上最常見的PHP模板引擎是smarty,但是smarty功能十分豐富,有些重量級了.
那有沒有更好的模板引擎呢? 先來探討一下模板引擎的幾大特點: 書寫簡單,執行速度,邏輯表達,方便擴展等.從這幾方面看最適合的模板引擎就是PHP本身了,所有的要求都能滿足要求,不管是smarty還是其他的模板引擎,在執行速度,邏輯表達,方便擴展的方面都不可能超過PHP本身,因為他們都是PHP實現的.唯一的短板就是書寫簡單這一方面.
那我們怎麽補齊這塊短板呢? 其實完全可以自己實現一個模板引擎語法規則,然後配合上一個預編譯過程即可,把自定義個的模板引擎語法,編譯成原生PHP代碼即可,既補足了書寫簡單的短板,也沒有對執行速度,邏輯表達,方便擴展等方面有任何損失.並且編譯只需一次,編譯一次以後模板頁面沒有變動,再也不需要第二次處理,配合OPCODE緩存更加強大,更能享受到PHP版本升級帶來的性能紅利.
那怎麽來實現呢? 在PHP頁面中使用的最多的就是<?php echo $row["title"]; ?>來輸出一個變量內容,寫起來鍵盤敲擊次數還是比較多的.完全可以實用模板語法{{$row.title}}代替,從原來的28個字符減少到了14個字符,包括if else foreach include等模板語法,只需要一個正則替換,即可實現一個簡單高效的模板引擎.
模板頁面
<table>
{{foreach $rows as $i => $row}}
<tr><td>{{$row["username"]}}</td><td>{{$row["password"]}}</td></tr>
{{endforeach}}
</table>
PHP頁面
<table>
<?php foreach ($rows as $i => $row) { ?>
<tr><td><?php echo $row["username"]; ?></td><td><?php echo $row["password"]; ?></td></tr>
<?php } ?>
</table>
核心代碼示意
// 此代碼已被精簡
$tmpl = preg_replace(‘/{{if (.+?)}}/‘, ‘<?php if ($1) { ?>‘, $tmpl);
$tmpl = preg_replace(‘/{{else}}/‘, ‘<?php } else { ?>‘, $tmpl);
$tmpl = preg_replace(‘/{{elseif (.+?)}}/‘, ‘<?php } elseif ($1) { ?>‘, $tmpl);
$tmpl = preg_replace(‘/{{endif}}/‘, ‘<?php } ?>‘, $tmpl);
$tmpl = preg_replace(‘/{{foreach (.+?)}}/‘, ‘<?php foreach ($1) { ?>‘, $tmpl);
$tmpl = preg_replace(‘/{{endforeach}}/‘, ‘<?php } ?>‘, $tmpl);
$tmpl = preg_replace(‘/{{include (.+?)}}/‘, ‘<?php include $1.php; ?>‘, $tmpl);
$tmpl = preg_replace(‘/{{(.+?)}}/‘, ‘<?php echo $1; ?>‘, $tmpl);
好了,完美解決模板引擎的簡單高效需求,還有什麽自己的想法都可以添加進來哦!

論PHP模板的簡單高效實現