在MVC框架中,一般咱們將Smarty模板對象建立在父類控制器(Controller)中.經過實例化獲得smarty對象,供子類使用.php
在初始文件init.php中有個咱們定義的自動加載函數。然而,smarty在本身內部也定義了一個自動加載函數.數組
當咱們實例化某個對象實例的時候,程序應該走哪一個自動加載函數呢?框架
關於自動加載的分析:函數
①實現PHP內部預保留的一個函數spa
function __autoload($classname){ if(in_array($classname,$array)){ include $classname.".class.php"; } }
②定義一個函數,而後經過註冊,使其成爲自動加載函數
code
註冊自動加載函數:spl_autoload_register(callback $autoloadfunction);對象
function Mydefineautoload($classname){ if(in_array($classname,$array)){ include $classname.".class.php"; } } spl_autoload_register("Mydefineautoload");
③將方法註冊成爲一個自動加載函數it
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()又有咱們本身註冊的自動加載函數io
那程序會走哪一個自動加載函數呢?function
這裏有一個優先級的問題:
①註冊的自動加載函數或者方法,其優先級要比__autoload()的優先級要高
②對於註冊的自動加載函數或者方法,其優先級都是平級,無前後之分,程序會走兩個註冊的自動加載方法
spl_autoload_register能夠提升訪問級別
一 處理好spl_autoload_register
二 模板經過smarty來使用
三 在父類裏邊把smarty實例化好