在以前,咱們已經學習過Composer自動加載的原理,其實就是利用了PHP中的類自動加載的特性。在文末有該系列文章的連接。php
PHP中類的自動加載主要依靠的是__autoload()和spl_autoload_register()這兩個方法。今天咱們就來簡單的看一下這兩個方法的使用。git
作爲一個已經快要被淘汰的魔術方法,咱們只須要了解便可。若是在PHP7中使用這個方法的話,會報出過期的警告,系統會建議咱們使用spl_autoload_register()方法。github
function __autoload($name){ include __DIR__ . '/autoload/' . $name . '.class.php'; } $autoA = new AutoA(); var_dump($autoA);
當咱們實例化AutoA類時,當前的文件並無這個類,也沒有從其餘文件中include或者require,這時,就會自動進入魔術方法__autoload()中。咱們在__autoload()方法中只須要去include這個類所在的文件便可。微信
這個方法目前已經替代了上述魔術方法自動加載類的功能。它是spl擴展庫中的一個方法,spl擴展庫如今已經默認集成在了PHP中,你們能夠放心地直接使用。composer
spl_autoload_register()相對於__autoload()的好處是它能夠去註冊一個__autoload(),而且實現並維護了一個__autoload()隊列。原來在一個文件中只能有一個__autoload()方法,但如今,你擁有的是一個隊列。框架
這樣,你就不須要將全部加載代碼都寫在一個__autoload()方法中,而是可使用多個spl_autoload_register()去單獨進行每一個類的加載處理。oop
spl_autoload_register(function($name){ include __DIR__ . '/autoload/' . $name . '.class.php'; }); $autoA = new AutoA(); var_dump($autoA);
參考:深刻學習Composer原理(二)學習
在自動加載中,咱們只須要使用include就能夠了,類並不會重複加載。測試
spl_autoload_register(function($name){ include __DIR__ . '/autoload/' . $name . '.class.php'; echo $name, PHP_EOL; }); $autoA = new AutoA(); var_dump($autoA); $autoA = new AutoA(); var_dump($autoA); $autoA = new AutoA(); var_dump($autoA); $autoB = new AutoB(); var_dump($autoB);
從代碼中,咱們能夠看出$name在屢次實例化類的狀況下只被輸出了一次。因此並不須要關心會有類文件重複加載的問題。並且在大型框架中使用composer的時候會加載很是多的類,_once方法也會帶來效率的問題。ui
此次的文章只是對類自動加載進行了簡單的介紹,想深刻了解這方面知識的能夠移步以前寫過的Composer系列文章:
關注公衆號:【硬核項目經理】獲取最新文章
添加微信/QQ好友:【xiaoyuezigonggong/149844827】免費得PHP、項目管理學習資料
知乎、公衆號、抖音、頭條搜索【硬核項目經理】
B站ID:482780532