首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 模板引擎、變數陣列技巧與正則表達式實戰總結

     編輯:PHP 相關知識

前言:PHP 的三大核心優勢

PHP 繼承了 Perl 強大的正則表達式、C 語言的高效能,並擁有原生模板特性。本文整理三大實戰主題:模板機制、變數/陣列進階技巧、正則表達式應用。

一、 PHP 模板:分離邏輯與視圖

為什麼需要模板?

  • 傳統 PHP 混寫 HTML:讀取快,但前後端分工困難,設計師無法修改版面。
  • 模板引擎:後端輸出資料,前端專注樣板,最終合併輸出。

核心原理:正則替換

主流 PHP 模板庫(如 PHPLIB template.inc、Smarty 前身)皆利用 preg_replace() 將標籤(如 {$var}、{loop $arr})轉換為 PHP 代碼並執行。

簡易模板類雛形

<?php
class SimpleTemplate {
    private $vars = [];
    private $template;

    public function loadFile($file) {
        $this->template = file_get_contents($file);
    }

    public function assign($key, $value) {
        $this->vars[$key] = $value;
    }

    public function render() {
        $output = $this->template;
        foreach ($this->vars as $key => $val) {
            $output = str_replace('{$' . $key . '}', $val, $output);
        }
        // 簡易迴圈支援 {loop $arr}...{/loop}
        $output = preg_replace_callback(
            '/\{loop\s+\$(\w+)\}(.*?)\{\/loop\}/s',
            function($m) {
                $arr = $this->vars[$m[1]] ?? [];
                $html = '';
                foreach ($arr as $item) {
                    $row = $m[2];
                    foreach ($item as $k => $v) {
                        $row = str_replace('{$' . $k . '}', $v, $row);
                    }
                    $html .= $row;
                }
                return $html;
            },
            $output
        );
        return $output;
    }
}

// 使用範例
$tpl = new SimpleTemplate();
$tpl->loadFile('list.tpl');
$tpl->assign('title', '最新文章');
$tpl->assign('list', [
    ['id'=>1, 'name'=>'文章一'],
    ['id'=>2, 'name'=>'文章二'],
]);
echo $tpl->render();
?>

list.tpl 內容:

<h1>{$title}</h1>
<ul>
{loop $list}
  <li>ID: {$id} - 標題: {$name}</li>
{/loop}
</ul>

二、 變數與陣列進階技巧

1. 迴圈三劍客:foreach、list、each

$data = ['a'=>'data1', 'b'=>'data2', 'c'=>'data3'];

// each + list(舊式,PHP 7.2+ 棄用 each)
while (list($key, $val) = each($data)) {
    echo "$key => $val
"; } reset($data); // 重置指標 // foreach(推薦) foreach ($data as $key => $val) { echo "$key => $val
"; }

2. 變數變數、函數變數、引用傳遞

<?php
// 變數變數
$var = "this is a var";
$varname = "var";
echo $$varname; // 輸出: this is a var

// 函數變數
function fun1($str) { echo $str; }
$funname = "fun1";
$funname("This is a function!"); // 動態呼叫

// 引用傳遞(類指標行為)
function add_ref(&$a) { $a++; }
$c = 0;
add_ref($c);
echo $c; // 輸出 1(引用修改原值)

function add_val($a) { $a++; }
$c = 0;
add_val($c);
echo $c; // 輸出 0(值傳遞,不影響原值)
?>

關鍵: &$a 宣告參數為引用,函數內修改會影響外部變數,模擬 C 指標行為。

三、 正則表達式實戰

基礎語法速查

符號含義
^字串開頭
$字串結尾
[0-9]字元集合(0-9)
{n}重複 n 次
\d數字簡寫

實戰範例:驗證北京電話號碼

<?php
$pattern = '^010\d{8}$'; // 010 開頭 + 8 位數字
$phone = '01080718828';

if (preg_match($pattern, $phone)) {
    echo "北京號碼格式正確";
} else {
    echo "非北京號碼或格式錯誤";
}
?>

說明: ^010$ 僅判斷前三碼,^010\d{8}$ 同時驗證總長度與格式。

常見應用場景

  • 表單驗證(Email、手機、身分證)
  • 模板引擎標籤解析
  • UBB/BBCode 論壇代碼轉換
  • 資料清洗與擷取(爬蟲)

結語

模板實現關注點分離,變數/陣列技巧提升代碼靈活度,正則表達式賦予字串處理強大威力。三者結合,構成 PHP 開發者進階的核心工具箱。建議深入學習 PCRE 語法與現代模板引擎(Twig、Blade)以應對複雜專案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved