我用的「模板」

2021-04-01 01:32:45 字數 2561 閱讀 5579

php裡面有乙個很流行的詞:「模板」,所謂「模板」,是一種在web開發中將html檔案和指令碼分離的一種做法,試圖更清楚的劃分程式設計師和美工的界限,等等功能。

我一直很鬱悶的就是,寫程式的時候必須在模板和php之間來回奔波,每用一種模板,都要適應它們的語法,抱怨它們的不足。

至於模板的好處,我就不說了,網上多的是。

為什麼不用傳統的html和php混合編寫的方式?各有各的看法。

如果用模板,至少有兩個缺點:

1、速度

不管哪一種模板,都要將模板語言轉換成php語句,即使是號稱有「編譯」功能的**arty、**arttemplate等等。尤其是**arty,**arty過於龐大和複雜,即使經過編譯,php程式每次還是得初始化**arty類、經過一系列判斷……

如果你去看看**arty快取檔案,或許你會覺得,裡面的**象你剛學php的時候寫的……

2、功能

在用模板寫程式的時候,「多種迴圈」和「檔案巢狀」經常會將人折磨的很鬱悶,反正我在剛開始用這些模板的時候就是。

如果直接用混合php和html的方式,這種問題馬上就迎刃而解了。

最近做的乙個專案裡面,一直被**arty的龐大和效率所困擾,最終決定放棄這個龐然大物,選擇了最古老的php與html**混合的方式。但是姑且還是將其稱為「模板」吧。

用**arty的時候,我是自己寫了乙個類,按照phplib的方法名重寫封裝了一下**arty。決定放棄**arty以後,模板檔案肯定要全部重寫,但是為了儘量減少程式的修改,我將這個類全部重新改寫了,去處了所有與**arty相關的**,取而代之的是下面這個簡單的類:

<?php

class ezj_template

//-- end of constructor

/** 將模板內容輸出到瀏覽器

@param string $cache_id

@param string $***pile_id

@access public

@return void

*/function output($cache_id = null, $***pile_id = null)

if ( $ezj->vars['gunzip_enabled']==1 )

extract($this->vars);

$t = &$this->t_dir;

@include_once( $t . $this->main );

if ( defined('without_shutdown') )

}//-- end of method `output`

function set_var($tpl_var, $value = null)

function set_file($file)

function assign($var , $value=null)

}else

}}//-- end of class `ezj_template`

?>

這個類裡面比較關鍵的$main , $vars , function output(),第乙個記錄了將要輸出的模板(其實是乙個php檔案),第二個以陣列方式儲存所謂的「模板變數」,第三個是將模板內容輸出到瀏覽器。

在我的思路裡面,所謂的「模板」不再是單純的html和模板語言結合的檔案,而是乙個傳統的php與html混合的檔案,在模板類向瀏覽器輸出內容的時候,把這個「模板」include進來就可以了,下面就是乙個我專案裡的「模板」檔案:

<?php include($t.'include/header.php');?>

<?php if ( $_popup ) ?>

images/index_05.gif">

<?php if ( $_tpl_cfg_show_search ) ?>

images/index_05.gif">

images/index_20.gif">

<?php if ( $_tpl_cfg_show_vote ) ?>

<?php if ( $_tpl_cfg_show_link ) ?>

<?php } ?>

<?php if ( $_tpl_cfg_show_news ) ?>

<?php if ( $_tpl_cfg_show_prod ) ?>

<?php include($t.'include/foot.php');?>

我從這樣的修改中獲得了下列好處:

1、效率

根據我的除錯,在用**arty之前,專案首頁在我的本本上基本上要消耗0.1x~0.2x秒之間,放棄**arty以後,基本穩定在0.07x以下

2、更加精簡的php檔案

備註:**arty是乙個好東西,但是並不是任何時候都適合用**arty來開發專案^^

我的框架 模板

模板類stemplate 一.for迴圈 缺陷 如表示式中有 大於號 將導致檢視在dw中出現多餘字元 二.foreach迴圈 v 缺陷 將導致檢視在dw中出現多餘字元 三.if判斷 5 2 缺陷 如果表示式中有 大於號 將導致檢視在dw中出現多餘字元 四.巢狀原生 五.子模板包含 注意 緊密連線 六...

我的匯出模板

表頭 string title new string hssfworkbook book new hssfworkbook hssfsheet sheet book.createsheet 船舶基本資訊 hssfrow titlerow0 sheet.createrow 0 第一行 實施部門 tit...

我的bfs模板

最近做了幾道bfs題,總的來說有部分 是幾乎不用去改動的,比如用佇列實現bfs的流程。include include include using namespace std struct node int mp 1001 1001 int vis 1001 1001 bool judge int n...