学习php自行开发MVC框架过程(三)
三、自动加载类库
1、我们首先打开core目录并创建一个route.php的文件
2、我们再打开core目录下的xia.php,再建一个方法load:
3、再打开入口文件在下面加一条
sql_autoload_register('\core\xia::load');//目的是当我们new一个类的时候如果这个类不存在的话他就会触发一个方法指定到xia下的load方法中去,通过这个方法我们把不存在的类引入一下
public static $classMap = array();//建一个静态属性,防止重复引入
static public function load($class){
//自动加载类库
//new \core\route();
//$class = '\core\route';
//IMOOC.'/core/route.php';相当于我们把$class的这个字符串转化为本行的字符串
//然后就要把'\'转化为'/';
if(isset($classMap[$class])){//如果这个类存在就直接返回true;
return true;
}else{ //如果该类不存在就判断该文件是否存在
$class = str_replace('\\','/',$class);
$file = IMOOC.'/'.$class.'php';
if(is_file($file)){
include $file;
self::$classMap[$class] = $class;
}else{
return false;
}
}
最后我们进行测试在run方法中加
$route = new \core\route();
然后在route.php中这样写
<?php
namespace core;
class route
{
public function __construct()
{
return p('route ok');
}
}
可以看到route ok
这样我们就可以通过new一个不存在的类去触发sql_autoload_register这个方法,去找对应的自动加载的类,在自动加载的类当中如果已加载的话就会返回一个true避免重复加载的情况,如果没有就把我们对应的这个类转化一下,最后include进来,这样我们的一个自动加载类就完成啦