PHP自动加载上——spl_autoload_register
spl_autoload_register函數是實現自動加載未定義類功能的的重要方法,所謂的自動加載意思就是 我們的new 一個類的時候必須先include或者require的類文件,如果沒有include或者require,則會報錯。那這樣我們就必須在文件頭部寫上許多include或require文件,非常麻煩,
為了使得沒有include或者require類的時候也正常new一個類,所以有了自動加載的概念,也就是說new一個類之前不用事先包含類文件也可以正常new,這樣我們的文件頭部就不用包含許多include(require)。其實這算一種封裝!
用spl_autoload_register函數可以實現上面說的功能,我們來看看實現原理。這個函數的參數如下:
autoload_function
這是一個函數【方法】名稱,可以是字符串或者數組(調用類方法使用)。這個函數(方法)的功能就是,來把需要new 的類文件包含include(requeire)進來,這樣new的時候就不會找不到文件了。其實就是封裝整個項目的include和require功能。
throw
此參數設置了 autoload_function 無法成功注冊時, spl_autoload_register()是否拋出異常。
prepend
如果是 true,spl_autoload_register() 會添加函數到隊列之首,而不是隊列尾部。
當我們new一個類,并且這個類文件沒有被包含時候就會執行這個autoload_function方法:
先來看一個錯誤例子:
使用spl_autoload_register方法
//文件 autoloadClass.php ,需要new的文件 class AutoloadClass{public function __construct(){echo '你已經包含我了';} }//文件autoloadDemo.php文件 spl_autoload_register('myAutoLoad', true, true); function myAutoLoad($className){echo "所有的包含文件工作都交給我!\r\n";$classFileName = "./{$className}.php";echo "我來包含!{$classFileName}\r\n";include "./{$className}.php"; } $objDemo = new AutoloadClass(); /** 輸出: 所有的包含文件工作都交給我! 我來包含!./AutoloadClass.php 你已經包含我了 */通過上面例子我們可以看到,當new一個未包含的類時候,會去執行spl_autoload_register第一個參數函數名的函數,這個函數有一個參數就是需要new的類名,這個函數的功能就是把這個類給包含進來(類名和文件名一致),這樣就實現了自動加載功能。原理就是這樣,不是很復雜。
另外我們可以改為匿名函數來實現:
轉載于:https://www.cnblogs.com/scofi/p/7522126.html
總結
以上是生活随笔為你收集整理的PHP自动加载上——spl_autoload_register的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 步进电机的单双极驱动
- 下一篇: 《结对-结对编项目作业名称-开发环境搭建