來(lái)聊聊,spl_autoload_register的前世今生
本文將會(huì)帶你了解屬于spl_autoload_register的故事。
前言
咔咔整理了一個(gè)路線圖,著手打造一份面試寶典,準(zhǔn)備按照這樣的路線圖進(jìn)行編寫文章,后期發(fā)現(xiàn)沒(méi)有補(bǔ)充到的知識(shí)點(diǎn)在進(jìn)行添加。也期待各位伙伴一起來(lái)幫助補(bǔ)充一下。評(píng)論區(qū)見(jiàn)哦!
一、spl_autoload_register前世今生
在剛剛接觸PHP沒(méi)有使用框架之前相信大多數(shù)伙伴都用過(guò)include和require,當(dāng)然還有include_once和require_once。
這倆個(gè)區(qū)別還記得嗎?
include引入報(bào)錯(cuò)時(shí)只會(huì)有警告,而require則會(huì)直接讓腳本停止。
在PHP5.3引入了命名空間的概念,為此在PHP文檔中記載著11年前一位貢獻(xiàn)者是這樣說(shuō)的,I made this benchmark to ensure that I don't recommend something that could be called "nice, but slow" later。
翻譯過(guò)來(lái)是“我做的這個(gè)測(cè)試,是為了確保我以后不推薦可以稱之為不錯(cuò),但是很慢的東西”。
做的這個(gè)測(cè)試就是定義了10個(gè)文件夾,每個(gè)文件夾有10個(gè)子文件夾并且每個(gè)子文件夾里都有10個(gè)類,然后使用了autoload和spl_autoload對(duì)比之后,平均執(zhí)行時(shí)間多50ms。
那么這個(gè)東西指的就是_autoload(),終將這個(gè)方法在PHP7.2被廢棄。
那么除了效率問(wèn)題之外還有一個(gè)原因最終廢棄了_autoload這個(gè)方法。
spl_autoload_register可以根據(jù)自己需求寫多個(gè),加載順序是按照隊(duì)列方式,先進(jìn)先出。
autoload是全局函數(shù),所以只能定義一次,多次定義會(huì)報(bào)錯(cuò)。如果一個(gè)項(xiàng)目使用多個(gè)框架實(shí)現(xiàn),就會(huì)引發(fā)這樣的問(wèn)題。
二、spl_autoload_register簡(jiǎn)單使用
這個(gè)函數(shù)只有三個(gè)參數(shù),第一個(gè)參數(shù)為自動(dòng)加載的函數(shù),第二參數(shù)為自動(dòng)注冊(cè)的函數(shù)失敗時(shí)是否拋出異常,第三個(gè)參數(shù)為添加函數(shù)到隊(duì)列之首,而不是隊(duì)列尾部。
以上都是根據(jù)true定義的。
定義倆個(gè)文件say和user
say文件聲明一個(gè)類Say并且設(shè)置一個(gè)方法hello
這時(shí)來(lái)到user文件,我們需要先定義一個(gè)autoload方法,然后使用spl_autoload_register進(jìn)行注冊(cè)
打印出來(lái)的數(shù)據(jù)結(jié)果
堅(jiān)持學(xué)習(xí)、堅(jiān)持寫博、堅(jiān)持分享是咔咔從業(yè)以來(lái)一直所秉持的信念。希望在偌大互聯(lián)網(wǎng)中咔咔的文章能帶給你一絲絲幫助。
PHP
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。