PHP自動載入機制

不該相遇在秋天發表於2017-10-29

 

類的載入共經歷了三個階段

 

第一階段是程式導向式的做法,整個專案裡到處都是include或require。

問題:難看,不易維護。

.

 

第二階段是魔術方法__autoload,當new一個類的時候,如果類不存在,則會呼叫此方法傳入類名。

 

如今很多框架都已經採用PSR-4規範化程式設計
示例:

 

也就是說 名稱空間加上類名 就等於該類的檔案路徑 轉義一下反斜線拼上字尾名
如下

 

autoload機制可以使得PHP程式在使用類時才自動包含檔案,而不是一開始就將所有的類檔案全部包含,這就是自動載入。

問題:如今的專案越做越大,多人開發最終整合,甚至一個專案使用多個框架,這樣就導致出現多個__autoload函式,函式名報錯,函式內容不相容。

 

第三階段是目前的做法,PHP推出了spl_autoload_register方法,該方法可以註冊一個autoload,並且可以多次註冊。

 

有多種寫法,各大PHP框架中都能找到自動載入身影。

 

註冊的函式會進入佇列中,多次註冊時,先進先出,載入成功則終止,載入失敗會繼續呼叫佇列中下一個被註冊的函式。

相關文章