首頁 > 後端開發 > php教程 > 一文詳細PHP模板引擎的原理(附程式碼範例)

一文詳細PHP模板引擎的原理(附程式碼範例)

藏色散人
發布: 2023-04-11 07:26:02
轉載
3613 人瀏覽過

開發一個web項目,通常分為兩個部分,一部分是GUI,即介面、美工,使用HTML,CSS,JS編寫,另一部分則是業務邏輯,即程式、功能,使用PHP編寫。而模板引擎則是聯繫這兩部分的“橋樑”,可理解成一個PHP類,裡面定義了許多方法,實現了將PHP的原始輸出加載上界面樣式後再輸出。

沒用模板之前的寫的程式碼是這樣的:

<?php

$title = “标题”;

$content = “内容”;

?>

<html>

<head><title><?php echo $title; ?></title></head>

<body><?php echo $content; ?></body>

</html>
登入後複製

這樣的話美工與邏輯沒有分離,簡單的說就是PHP程式設計師不僅要寫程式還要精通美工,這往往十分困難,因此需要將這兩部分工作分開。

在此透過自己創建一個簡單的模板引擎為例子,更好的體會模板引擎的原理。

之前說了開發一個web專案分成GUI與業務邏輯兩部分,因此我們創建兩個資料夾,一個命名為“templates”,裡邊存放模板,新建一個tpl.html文件,另一個命名為“PHP”,裡邊存放業務邏輯,新建一個index.php檔。

tpl.html檔案程式碼通常是這樣:

<html>

<head><title><{$title}></title></head>

<body><{ $content;}></body>

</html>
登入後複製

可以看出來,和之前的程式碼相比,tpl.html中只有html程式碼,沒有php程式碼,但增加了新的標籤,這類標籤是自己定義的,裡面的內容只有經過模板引擎編譯後才能被識別,編譯後的檔案存放在「templates_c」資料夾下。這個文件主要是介面設計用的,將大量使用到CSS,JS等技術。

這時候tpl.html和index.php仍舊是分離的,互不干擾,因此需要一個「橋樑」連接,即模板引擎,其實就是一個PHP類,故在此可以創建一個mytpl. class.php的PHP檔。

mytpl.class.php檔案通常定義一個類別MyTpl,類別中需定義一個陣列tpl_var[]用於存放tpl.html中自訂內容標籤的參數,此外還需定義一些方法,這些方法最主要的目的是將tpl.hml中無法辨識的的內容標籤轉換成PHP語句,然後再寫到一個「templates_c」資料夾下的tpl_c.html中,這個過程就是所謂的編譯。

通常tpl_c.html檔案的程式碼是這樣的:

<html>

<head><title><?php echo $this->tpl_var[“title”]; ?></head>

<body><?php echo $this->tpl_var[“content”]; ?}></body>

</html>
登入後複製

可以看出上面的程式碼是可以被辨識的,因為自訂的內容標籤已經被替換成PHP語句了,但是title和content的值是多少我們還不得而知,這時候之前創建的index.php要上場了.

index.php通常它程式碼是這樣的:

include  “tpl.class.php文件”;//加载模板引擎

$tpl = new MyTpl();//实例化一个模板类

$title = “标题”;

$content = “内容”;

$tpl->assign(“title”,$title);//调用模板类中的方法,分配变量

$tpl->assign(“content”,$content);

$tpl->display(“tpl.html”);//调用模板类中的方法,用于显示编译后的内容
登入後複製

上面的程式碼只是一些簡單的描述程式碼,其中的變數的值可以是直接定義的也可以是從資料庫中取得的,此外該檔案還可以編寫一些複雜的PHP程序,也就是之前說的業務邏輯。

這樣GUI和業務邏輯的工作就分開了,美工設計人員只需要編寫模板檔案就可以改變web的介面,而PHP程式設計師則可以專心編寫自己的程式。

公司內部一般都有自己的模板引擎,而通常模板引擎自己寫的話完全沒有必要,因為市面上已經有一些很成熟的模板引擎了,比如Smarty,我們只需要懂得如何使用它就好了。

推薦學習:《PHP影片教學

以上是一文詳細PHP模板引擎的原理(附程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:cnblogs.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板