💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
#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方法 ``` 特别注意,创建类的时候,类的名称和文件的名称要是一致的。