composer 自動載入的四種方式

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

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

require 'vendor/autoload.php';

PSR-4(推薦)

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

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

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

PSR-0(不推薦)

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

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

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

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

Class-map方式

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

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

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

實例化類的方式這裏有兩種不一樣的狀況。io

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

Files方式

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

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

 

轉:https://blog.csdn.net/ltx06/article/details/78820127

相關文章
相關標籤/搜索