## 2.2 类自动加载
~~~
1. 在启动文件中新建一个load()方法
2. 举例:新建一个路由类
3. spl_autoload_register 注册给定的函数作为` __autoload` 的实现
4. 自动加载实现
5. 启动框架
~~~
### 1. 在启动文件中新建一个`load()`方法
* * * * *
*D:\wamp\www\web.com\core\thinkphp.php*
~~~
// 自由加载类库
static public function load($class)
{
//
}
~~~
### 2. 举例:新建一个路由类
*D:\wamp\www\web.com\core\route.php*
~~~
<?php
namespace core;
class route
{
public function __construct()
{
echo "路由初始化成功";
}
}
~~~
### 3. `spl_autoload_register` 注册给定的函数作为` __autoload` 的实现
[spl_autoload_register](http://php.net/manual/zh/function.spl-autoload-register.php) 注册给定的函数作为 __autoload 的实现
~~~
//class 未能加载的 spl_autoload_register()
<?php
namespace Foobar;
class Foo {
static public function test($name) {
print '[['. $name .']]';
}
}
spl_autoload_register(__NAMESPACE__ .'\Foo::test'); // 自 PHP 5.3.0 起
new InexistentClass;
?>
~~~
### 4. 自动加载实现
~~~
static public function load($class)
{
if (isset($classMap[$class])) {
return true;
} else {
// p($class);
$class = str_replace('\\', '/', $class);
$file = THINKPHP . '/' . $class . '.php';
// p($file);
if (is_file($file)) {
include $file;
self::$classMap[$class] = $class;
} else {
return false;
}
}
}
~~~
### 5. 启动框架
*D:\wamp\www\web.com\index.php*
~~~
......
// 实现自动加载
spl_autoload_register('\core\thinkphp::load');
\core\thinkphp::run();
~~~
### 效果
![](https://box.kancloud.cn/3da3f3a0cbe303ae7d4665c03ebd633b_952x607.png)