#7.自动加载类文件
在一个正常的项目中,会用到很多的类文件,我们就要写很多航require的语句,这样会让代码的冗余度加大,所以为了处理这个情况,php中有一个方法是自动加载类函数,自动加载方法。所以我们需要一个方法去实现加载指定的类文件。具体目标有
- 明确指明改项目中所有类存放目录地址,这里就是控制器controllers,模型model,核心core这三个地方
- 判断类文件在哪个目录中,在找到后require过来,如果都不存在那么异常报错
- 为什么不用__autoload方法来加载类文件,如果项目中前后台都有autoload方法,可能会产生重定义错误。所以我们直接自己定义自动加载类的方法,然后在入口文件处通过spl_autoload_register将我们的类文件进行加载。
```cpp
|-core 框架核心目录
| |-App.class.php URL重写类
<?php
/**
* Created by PhpStorm.
* User: find35.com
* Date: 15/12/25
* Time: 上午10:53
*/
class App
{
/**
* 自动加载类方法
* @param $className
* @throws Exception
*/
public static function myAutoloader($className){
//控制器类文件目录
$controller = 'app/controllers/'.$className.'.class.php';
//模型类文件目录
$model = 'app/models/'.$className.'.class.php';
//核心类文件目录
$core = 'core/'.$className.'.class.php';
if(file_exists($controller)){
require_once $controller;
}else if(file_exists($model)){
require_once $model;
}else if(file_exists($core)){
require_once $core;
}else{
throw new Exception('类文件不存在');
}
}
}
```
```cpp
|-index.php 项目前台入口文件,单一入口
<?php
/**
* Created by PhpStorm.
* User: find35.com
* Date: 15/12/24
* Time: 下午5:15
*/
echo "<meta charset='utf-8'>";
require_once 'core/App.class.php';
//注册一个
spl_autoload_register(array('App','myAutoloader'));
try{
App::run();
throw new Exception();
}catch(Exception $e){
echo $e->getMessage();
}
```
此时我们在浏览器中输入
```cpp
http://localhost/php_mvc/home/index
```
如果展示如下,则表示自动加载类已经成功
```cpp
这里是home控制器里的index方法
```
特别注意,创建类的时候,类的名称和文件的名称要是一致的。