天天看點

php mvc結合smarty,Smarty3結合MVC進行使用

在MVC架構中,通常我們将Smarty模闆對象建立在父類控制器(Controller)中.通過執行個體化得到smarty對象,供子類使用.

在初始檔案init.php中有個我們定義的自動加載函數。然而,smarty在自己内部也定義了一個自動加載函數.

當我們執行個體化某個對象執行個體的時候,程式應該走哪個自動加載函數呢?

關于自動加載的分析:

①實作PHP内部預保留的一個函數

function __autoload($classname){

if(in_array($classname,$array)){

include $classname.".class.php";

}

}

②定義一個函數,然後通過注冊,使其成為自動加載函數

注冊自動加載函數:spl_autoload_register(callback $autoloadfunction);

function Mydefineautoload($classname){

if(in_array($classname,$array)){

include $classname.".class.php";

}

}

spl_autoload_register("Mydefineautoload");

③将方法注冊成為一個自動加載函數

class  bookstore{

spl_autoload_register(array('bookstore','defineautoload'));

//使用數組,第一個元素代表哪個類,第二個元素表示需要被注冊的方法,其方法必須是個靜态方法

public static function defineautoload($classname){

if(in_array($classname,$array)){

include $classname.".class.php";

}

}

}

//如果在外邊

spl_autoload_register("bookstore::defineautoload");

上面我們總結了三種方式來定義自動加載,那如果在程式中既有__autoload()又有我們自己注冊的自動加載函數

那程式會走哪個自動加載函數呢?

這裡有一個優先級的問題:

①注冊的自動加載函數或者方法,其優先級要比__autoload()的優先級要高

②對于注冊的自動加載函數或者方法,其優先級都是平級,無先後之分,程式會走兩個注冊的自動加載方法

spl_autoload_register可以提高通路級别

smarty在項目中使用需要注意:

一  處理好spl_autoload_register

二  模闆通過smarty來使用

三  在父類裡邊把smarty執行個體化好