天天看点

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