Composer 不只可以自動載入 class,也可以自動載入 function。
看看 Laravel 怎麼做
不知道大家有沒有懷疑過為什麼在 Laravel 專案中到處都可以使用 app()
, view()
⋯⋯等,這些方便的 function?
其實這是透過 Composer 的 autoload 達成的。
打開 Laravel 的 source code,可以在其專案根目錄的 composer.json
中,找到 autoload
區塊,在這邊可以看到 files
這個 property:
"autoload": {
"files": [
"src/Illuminate/Foundation/helpers.php",
"src/Illuminate/Support/helpers.php"
],
"psr-4": {
"Illuminate\\": "src/Illuminate/"
}
}
Laravel 就是藉由在 autoload 中的 files
註冊這兩隻檔案,告訴 Composer 要自動載入哪些檔案。
src/Illuminate/Foundation/helpers.php
src/Illuminate/Support/helpers.php
那定義在這支檔案中的 app()
、view()
等 helper functions,就會隨著這兩隻檔案,每次都被自動載入到程式中,讓大家可以直接使用這些 helper functions,不需要額外手動載入檔案,相當方便。
小結
這邊補上官網說明:
If you want to require certain files explicitly on every request then you can use the files autoloading mechanism.
如果你想要在每個請求 (request) 都去明確的要求 (require) 特定的檔案,那麼你就可以使用檔案自動載入機制 (files autoloading mechanism)。
因此當自己的專案也有一些全域的 function,或是一些不方便寫成 class 的 method 的 function,就可以採用這樣的作法。
只要仿照 Laravel 或官網的說明,在自己的專案根目錄的 composer.json
中找到 autoload 區塊,並加上 files
,填上需要載入的檔案路徑後,再執行:
php composer.phar dump-autoload
或
composer dump-autoload
就可以在你的PHP script中使用那些被自動載入的function了。