2019年9月13日

讓 PHP Composer 幫你自動載入 Function

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了。

參考連結