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实例化好

你可能感兴趣的:(Smarty3结合MVC进行使用)