## 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();
~~~
### 效果
