#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方法
```
特別注意,創建類的時候,類的名稱和文件的名稱要是一致的。