## 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