MVC自动加载实现
自动加载
总结:
控制器类(可增加)
模型类(可增加)
框架核心类(确定的)
对于所有的类,分成两方面考虑:
一:可以确定的类。(当自动加载方法确定时,类文件已经确定了)
二:可以被增加的类。(当自动加载方法确定时,没有办法确定)
对已经确定的类,采用最简洁的方式进行加载。
对于需要增加的类,需要通过类名 的规律,完成其位置的判断,进而完成自动加载。
规律是:
XXXController结尾的,控制器类,在当前平台下controller目录将其载入
XXXModel结尾的,模型类,当前平台下的model目录将其载入。
编码实现:
在入口中增加自动加载方法,并注册:
function userAutoload($class_name){
}
spl_autoload_register('userAutoload');
实现 userAutoload:
核心类加载:
function userAutoload($class_name){
$framework_class_list = array(
'Controller' => '.framework/Controller.class.php',
'Model' => '.framework/Model.class.php',
'Factroy' => '.framework/Factroy.class.php',
'MySQLDB' => '.framework/MySQLDB.class.php',
)
if(isset($framework_class_list[$class_name])){
require $framework_class_list[$class_name];
}
}
可增加类(控制器,模型):
function userAutoload($class_name){
$framework_class_list = array(
'Controller' => '.framework/Controller.class.php',
'Model' => '.framework/Model.class.php',
'Factroy' => '.framework/Factroy.class.php',
'MySQLDB' => '.framework/MySQLDB.class.php',
)
if(isset($framework_class_list[$class_name])){
require $framework_class_list[$class_name];
}else if(substr($class_name,-10) == 'Controller'){
require './application/'.PLATFORM.'/Controller/'.$class_name.'.class.php';
}else if(substr($class_name,-5) == 'Model'){
require './application/'.PLATFORM.'/Model/'.$class_name.'.class.php';
}
}
测试:
将项目所有对类文件的加载都删掉!