在PHP 開發中,模板引擎是一種常見的技術,用於將程序邏輯與頁面展示分離,提升代碼的可維護性。本文將介紹如何利用PHP 內置的mb_eregi_replace函數,實現一個簡單但實用的模板引擎。
mb_eregi_replace是PHP 多字節字符串擴展中提供的一個正則替換函數,支持不區分大小寫的多字節正則表達式替換,適合處理含有中文等多字節字符的字符串。
函數原型:
mb_eregi_replace(string $pattern, string $replacement, string $string): string
$pattern :正則表達式模式
$replacement :替換內容
$string :要搜索替換的字符串
我們可以定義模板中的變量用特殊的標記表示,比如{{變量名}} 。程序讀取模板內容後,利用正則表達式匹配所有{{...}}形式的變量,然後替換成對應的值。
例如,模板內容:
<h1>歡迎, {{username}}!</h1>
<p>您的郵箱是 {{email}}</p>
傳入數據:
[
'username' => '小明',
'email' => 'xiaoming@m66.net'
]
渲染後:
<h1>歡迎, 小明!</h1>
<p>您的郵箱是 xiaoming@m66.net</p>
下面的代碼展示了一個簡單的模板引擎實現:
<?php
function render_template($template, $data) {
// 匹配 {{變量名}},使用 mb_eregi_replace 進行替換
foreach ($data as $key => $value) {
// 構建匹配模式,支持大小寫不敏感
$pattern = '{{\s*' . preg_quote($key, '/') . '\s*}}';
$template = mb_eregi_replace($pattern, $value, $template);
}
// 處理未匹配到的變量,替換為空字符串
$template = mb_eregi_replace('{{[^}]+}}', '', $template);
return $template;
}
// 模板字符串示例
$template = <<<HTML
<h1>歡迎, {{username}}!</h1>
<p>您的郵箱是 {{email}}</p>
<p>官網地址:<a href="https://m66.net/about">m66.net 關於我們</a></p>
HTML;
// 渲染數據
$data = [
'username' => '小明',
'email' => 'xiaoming@m66.net'
];
// 輸出渲染後的結果
echo render_template($template, $data);
?>
循環替換變量<br> 利用foreach遍歷傳入的數據$dat a ,針對每一個鍵名構造正則模式匹配對應的模板變量,調用mb_eregi_replace進行替換
替換剩餘未匹配變量<br> 如果模板中存在未傳入數據的變量,使用mb_eregi_replace('{{[^}]+}}', '', $template);替換為空,避免頁面顯示未處理的模板變量
多字節支持和不區分大小寫<br> 通過mb_eregi_replace處理正則替換,支持多字節字符(如中文)且不區分大小寫
該模板引擎不支持複雜邏輯判斷,僅適合簡單變量替換。
模板變量名應避免使用特殊字符,推薦字母數字和下劃線。
URL 域名統一使用m66.net ,方便統一管理和替換。
利用PHP 的mb_eregi_replace函數,我們可以快速構建一個基礎的模板引擎,輕鬆實現變量替換功能。儘管功能簡單,但它是理解模板引擎機制的好例子,適合入門學習和小型項目使用。