## PHP类自动加载
1. 引入PHP文件
> php中所有的引入文件都需要用include、include_once 或 require、requuire_once 函数的其中一个,如:
~~~
<?php
//引入通用函数文件
include "common.php";
//下面就可以调用common中的函数了
?>
~~~
2. __autoload自动加载文件
> 当php文件中注册了该函数,在调用非本文件中且还没引入的类时,则自动会调用该函数进行引入前的判断操作,如:
~~~
<?php
//注册自动加载函数
function __autoload($class)
{
//在这里面把类的文件做了相对的映射
include "core/".$class.'class.php';
}
//实例化非文件且未引入的类,就是调用上面的__autoload函数
$class = new Test();
?>
~~~
3. spl_autoload_register自动加载文件
> 为什么有了__autoload还要有spl_autoload_register呢?这个问题问得很好,因为最简单的来说,一个系统中仅能有一个__autoload函数,这样的话,我们在加载类文件时,所有的判断条件就都要写在一个__autoload,这样的话,我们系统中的__autoload函数将会比较复杂。而spl_autoload_register可以多次调用,从而注册多个自动类加载函数如:
~~~
<?php
spl_autoload_register(function($class){
if($class == 'Test')
{
include 'Test/'.Test.'class.php';
}
});
spl_autoload_register(function($class){
if($class == 'Helper')
{
include 'Helper/'.Test.'class.php';
}
});
//实例化Helper类
$helper = new Helper();
?>
~~~
> 差点忘记说了,当文件时同时存在__autoload以及spl_autoload_register时,仅有spl_autoload_register启作用,__autoload不启作用。
## 好了 我们上面说了这么多,该轮到讲ThinkPHP5它的自动加载源码了。
>其实讲ThinkPHP5的自动加载原理也就用了上面的spl_autoload_register函数注册了类自加在载函数而已。
### 视频正在录制中,请同学们先预习,把代码放到自己的编辑器先运行:
~~~
function __autoload($class)
{
echo $class.'<br>';
}
spl_autoload_register(function($class){
echo $class.':spl_autoload_register1<br>';
});
spl_autoload_register(function($class){
echo $class.'spl_autoload_register2<br>';
});
$class = new autoLoadClass();
exit;
~~~
<embed src="http://www.tudou.com/v/b4IlKFUBbKA/&bid=05&rpid=1059277519&resourceId=1059277519_05_05_99/v.swf" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="opaque" width="865" height="523"></embed>
百度下载地址:http://pan.baidu.com/s/1eSeeYci
TP5粉丝群: 543608226
TP5底层答疑群: 451935051