本站的主題是商業,創業,美食,葡萄酒,閱讀,網路科技。
這是我的 FB粉專 以及 IG,我比較常使用 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。
本站的主題是商業,創業,美食,葡萄酒,閱讀,網路科技。