論 模板的簡單高效實現

2021-09-27 04:57:38 字數 1290 閱讀 7645

大家都知道php是世界上最好的語言,php在專案開發中的靈活性是個非常重要的優點,非常適合經常變動的業務邏輯和頁面內容,當然都離不開乙個好用的模板引擎,市面上最常見的php模板引擎是smarty,但是smarty功能十分豐富,有些重量級了.

那有沒有更好的模板引擎呢? 先來**一下模板引擎的幾大特點: 書寫簡單,執行速度,邏輯表達,方便擴充套件等.從這幾方面看最適合的模板引擎就是php本身了,所有的要求都能滿足要求,不管是smarty還是其他的模板引擎,在執行速度,邏輯表達,方便擴充套件的方面都不可能超過php本身,因為他們都是php實現的.唯一的短板就是書寫簡單這一方面.

那我們怎麼補齊這塊短板呢? 其實完全可以自己實現乙個模板引擎語法規則,然後配合上乙個預編譯過程即可,把自定義個的模板引擎語法,編譯成原生php**即可,既補足了書寫簡單的短板,也沒有對執行速度,邏輯表達,方便擴充套件等方面有任何損失.並且編譯只需一次,編譯一次以後模板頁面沒有變動,再也不需要第二次處理,配合opcode快取更加強大,更能享受到php版本公升級帶來的效能紅利.

那怎麼來實現呢? 在php頁面中使用的最多的就是<?php echo $row["title"]; ?>來輸出乙個變數內容,寫起來鍵盤敲擊次數還是比較多的.完全可以實用模板語法}代替,從原來的28個字元減少到了14個字元,包括if else foreach include等模板語法,只需要乙個正則替換,即可實現乙個簡單高效的模板引擎.

模板頁面

}    }}}

php頁面

<?php foreach ($rows as $i => $row) ?>

核心**示意

// 此**已被精簡

$tmpl = preg_replace('/}/',       '<?php if ($1) }/',           '<?php } else }/',   '<?php } elseif ($1) }/',          '<?php } ?>',               $tmpl);

$tmpl = preg_replace('/}/',  '<?php foreach ($1) }/',     '<?php } ?>',               $tmpl);

$tmpl = preg_replace('/}/',  '<?php include $1.php; ?>', $tmpl);

$tmpl = preg_replace('/}/',          '<?php echo $1; ?>',        $tmpl);

好了,完美解決模板引擎的簡單高效需求,還有什麼自己的想法都可以新增進來哦!

論公尺教授的高效講座

論公尺教授的高效講座 今天上午我很榮幸參加了公尺老師的講座,儘管在這之前我已經通過多種途徑查詢了公尺教授的資料,但見識了公尺老師風趣生動的演講方式還是眼前一亮,重點是公尺老師讓我學會了更高效的做事和學習,並且用親身經歷告訴我們學歷和能力後者更重要。公尺老師在2001年建立了提高班,用獨有的方式以高效...

list 模板類的簡單實現

最近學資料結構,於是嘗試著去實現了乙個 list 類,發現確實有很多問題,特別是類的繼承這一塊,有些問題搞不懂 這個 list 類只是乙個簡單的實現,只提供了基本的功能,也沒有邊界檢測什麼的,越界訪問的問題由使用者自己把握 很多功能都是沒有實現的,總得來說這是乙個比較裸的 list 模板類,沒有什麼...

簡單模板引擎的實現

需求 根據不同狀態 state為1,2,3三種情況 即type 1 type 2 type 3這三種情況,分別將狀態不同時要展示的內容新增到介面上。做這個需求的時候,遇到的問題是,由於用的原生js寫的,所以需要操作dom 因此,我要判斷state,判斷以後,再建立新的節點,再將內容新增到節點,更要命...