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...