composer 自動載入的四種方式

Composer 是PHP的一個包依賴管理工具,類似Ruby中的RubyGems或者Node中的NPM,它並非官方,但現在已經非常流行。此文並不介紹如何使用Composer,而是關注於它的autoload的內容吧。

對於第三方包的自動加載,Composer提供了四種方式的支持,分別是 PSR-0和PSR-4的自動加載,生成class-map,和直接包含files的方式。

首先引入autoload.php,在主文件 index.php 中。

require 'vendor/autoload.php';

PSR-4(推薦)

在composer.json裏是這樣進行配置的:

{
  "autoload": {
    "psr-4": {
      "Foo\\": "src/"
    }
  }
}

執行composer install更新自動加載。照PSR-4的規則,當在index.php中試圖new Foo\Bar\Baz這個class時,composer會自動去尋找 "src/Bar/Baz.php" 這個文件,如果它存在則進行加載。

PSR-0(不推薦)

在composer.json裏是這樣進行配置的:

{
  "autoload": {
    "psr-0": {
      "Foo\\": "src/"
    }
  }
}

執行composer install更新自動加載。注意,照PSR-0的規則,當在index.php中試圖new Foo\Bar\Baz這個class時,composer會去尋找 "src/Foo/Bar/Baz.php" 這個文件,如果它存在則進行加載。

NOTE:另外注意PSR-4和PSR-0的配置裏,"Foo\"結尾的命名空間分隔符必須加上並且進行轉義,以防出現"Foo"匹配到了"FooBar"這樣的意外發生。

Class-map方式

{
  "autoload": {
    "classmap": ["src/", "lib/", "Something.php"]
  }
}

執行composer install更新自動加載。composer會掃描指定目錄下以.php 或.inc 結尾的文件中的 class,生成 class 到指定 file path 的映射,並加入新生成的vendor/composer/autoload_classmap.php 文件中。 例如src/下有一個BaseController類,那麼在autoload_classmap.php文件中,就會生成這樣的配置:

'BaseController' => $baseDir . '/src/BaseController.php'

實例化類的方式這裏有兩種不同的情況。

  • 如果加載的文件有命名空間,直接按命名空間實例化。
  • 如果沒有命名空間,直接按類名實例化。

Files方式

{
  "autoload": {
    "files": ["src/MyLibrary/functions.php"]
  }
}

執行composer install更新自動加載。Files方式,就是手動指定供直接加載的文件。比如說我們有一系列全局的helper functions,可以放到一個helper文件裏然後直接進行加載,也就是說,當你用require 'vendor/autoload.php';加載自動加載類時自動將files裏的文件加載進來了,你直接使用就行了。




轉自:https://getyii.com/topic/697


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章