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