PHP Autoload
PHP

PHP Autoload

商業,創業,業務,職涯,美食,葡萄酒,閱讀,網路科技。

從 Larry 創業以及商業的經驗,希望以白話的口吻,介紹給大家這個商業的世界。

FB粉專會頻繁地分享以上主題,我最近也滿常使用Threads,歡迎大家追蹤互動~

__autoload
http://php.net/manual/en/function.autoload.php

當你 new 一個物件時

$obj = new myClass1();

__autoload function 會被觸發,class name 會被當作參數傳入。

在 new 其他 class 的物件時,

$obj = new myClass2();

__autoload 也會被觸發,所以你的 include / require 可以寫在 __autoload function 裡。

__autoload 有一個特別「沒」彈性的地方:一個 file scope 裡面不可以有兩個 __autoload,不然會 error。在你使用多個框架、plugin 混用時,如果每個框架、plugin 都用 __autoload,可以想像幾乎是沒辦法使用。

後來出現了 spl_autoload_register 來取代 __autoload (spl 為 standard php library 的縮寫)
http://php.net/manual/en/function.spl-autoload-register.php

spl_autoload_register 可以註冊多個 callback function, 你的 include / require 就寫在這些 callback function 裡。 當 new 一個物件時,php 執行環境會依序觸發這些 callback function,直到找到該物件的 class 為止。

有一些文章會把 namespace 與 autoload 擺在一起講,這點要釐清。namespace 與 autoload 觀念上是沒有關係的,即使你一個一個 class 去 include / require 也可以用 namespace。但幾乎所有現代框架有用 namespace 的,自己也要帶 autoload function 去對應自己的程式碼檔案結構。

PSR-4 有提供 autoload function sample code
https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md

但目前大概很少機會需要自己寫這些 autoloader。

商業,創業,業務,職涯,美食,葡萄酒,閱讀,網路科技。

從 Larry 創業以及商業的經驗,希望以白話的口吻,介紹給大家這個商業的世界。

FB粉專會頻繁地分享以上主題,我最近也滿常使用Threads,歡迎大家追蹤互動~