溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

論PHP模板的簡單高效實現(xiàn)

發(fā)布時間:2020-07-02 16:04:05 來源:網(wǎng)絡(luò) 閱讀:1000 作者:我是小谷粒 欄目:開發(fā)技術(shù)

大家都知道PHP是世界上最好的語言,PHP在項目開發(fā)中的靈活性是個非常重要的優(yōu)點(diǎn),非常適合經(jīng)常變動的業(yè)務(wù)邏輯和頁面內(nèi)容,當(dāng)然都離不開一個好用的模板引擎,市面上最常見的PHP模板引擎是smarty,但是smarty功能十分豐富,有些重量級了.
那有沒有更好的模板引擎呢? 先來探討一下模板引擎的幾大特點(diǎn): 書寫簡單,執(zhí)行速度,邏輯表達(dá),方便擴(kuò)展等.從這幾方面看最適合的模板引擎就是PHP本身了,所有的要求都能滿足要求,不管是smarty還是其他的模板引擎,在執(zhí)行速度,邏輯表達(dá),方便擴(kuò)展的方面都不可能超過PHP本身,因為他們都是PHP實現(xiàn)的.唯一的短板就是書寫簡單這一方面.
那我們怎么補(bǔ)齊這塊短板呢? 其實完全可以自己實現(xiàn)一個模板引擎語法規(guī)則,然后配合上一個預(yù)編譯過程即可,把自定義個的模板引擎語法,編譯成原生PHP代碼即可,既補(bǔ)足了書寫簡單的短板,也沒有對執(zhí)行速度,邏輯表達(dá),方便擴(kuò)展等方面有任何損失.并且編譯只需一次,編譯一次以后模板頁面沒有變動,再也不需要第二次處理,配合OPCODE緩存更加強(qiáng)大,更能享受到PHP版本升級帶來的性能紅利.
那怎么來實現(xiàn)呢? 在PHP頁面中使用的最多的就是<?php echo $row["title"]; ?>來輸出一個變量內(nèi)容,寫起來鍵盤敲擊次數(shù)還是比較多的.完全可以實用模板語法{{$row.title}}代替,從原來的28個字符減少到了14個字符,包括if else foreach include等模板語法,只需要一個正則替換,即可實現(xiàn)一個簡單高效的模板引擎.
模板頁面
<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);
好了,完美解決模板引擎的簡單高效需求,還有什么自己的想法都可以添加進(jìn)來哦!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI