php的自動加載:php
在php5之前,咱們要用某個類或類的方法,那必須include或者require,以後才能使用,每次用一個類,都須要寫一條include,很是麻煩。php框架
後來自從php5以後,對這個需求作了改進,若是當前沒有include進來,系統能自動去找到該類,自動引進~框架
因而:__autoload()函數應運而生。
實例以下A:
函數
index文件以下: 經過單一入口調用其餘類的方法,類不存在則會自動引入 $a=new Test(); function __autoload($class) { require __DIR__.'/'.$class.'.php'; } 注意:這是最先的方式,可是已經被廢棄,由於一個php工程可能須要依賴多個框架, 可是若是每一個框架或者工程都加載這個函數的話,就會衝突,報錯,函數重複。
後來自從5.3以後,出現了spl_autoload_register()這個函數,來進行類自動引入,,容許這個引入函數重複。ui
實例以下B:spa
spl_autoload_register('autoload'); spl_autoload_register('autoload1'); function autoload($class) { require __DIR__.'/'.$class.'.php'; } function autoload1($class) { require __DIR__.'/'.$class.'.php'; } Test3::test(); Test4::test(); //容許多個引入重複,我經過調用類,來引入多個文件,但最終都是調用一次
這2個還不夠,可是若是我若是要寫一個php框架的話,經過單一入口的方式,訪問某個類文件,那麼我該把這個函數作成一個類,作成路由,經過這個路由,來加載和使用文件。code
實例C:路由
單一入口:index.php <?php define('BASEDIR', __DIR__); include BASEDIR.'/IMooc/Loader.php'; spl_autoload_register('\\IMooc\\Loader::autoload'); ?> 路由類加載類:Loader.php <?php namespace IMooc; class Loader { static function autoload($class) { // echo BASEDIR.'/'.str_replace('\\','/',$class).'.php'; //把命名空間的路徑替換成正式路徑便可 require BASEDIR.'/'.str_replace('\\','/',$class).'.php'; } }