【Composer】自动加载 autoload

PHP类库的自动加载主要是由composer来实现的。

  • 项目安装composer之后(composer install),项目根目录会增加一个vendor目录,里面有一个autoload.php文件,接下来在项目入口引入这个文件即可支持自动加载。

autoload介绍

Composer支持四种自动加载模式:PSR-4(推荐)、PSR-0、classmap、files

  • 推荐使用PSR-4,此方式无需在每次新增类后手动修改composer.json配置

本文只讨论PSR-4的加载方式,如下所示psr-4定义了命名空间到项目目录(与vendor目录同级相对路径)的映射,命名空间Foo\\Bar\\Baz对应的文件将从src/Bar/Baz.php加载。

  • 命名空间必须以\\结尾,避免相同前缀的冲突,FooFooBar是有区别的
#composer.json autoload配置
{
    "autoload": {
        "psr-4": {
            "Foo\\": "src/"
        }
    }
}
  • 修改完composer.json的autoload字段后,需手动更新自动加载:
composer dumpautoload -o

autoload优化

使用自动加载会增加一些开销,一些大型框架每个请求会有50~100ms的延时。

  • 优化策略
    不要在开发环境下使用这些优化策略
优化方式 等级 说明
composer dump-autoload -o Level-1 将 PSR-4/PSR-0 的规则转化为了 classmap 的规则;当加载器找不到目标类是,会按照PSR-4/PSR-0去文件系统查找(速度慢)
composer dump-autoload -a Level-2/A 自动执行Level 1命令,生成classmap;但当找不到目标类时不会去文件系统查找
composer dump-autoload -apcu Level-2/B 不会自动生成classmap,只是启用APCu缓存来存储文件系统中找到类的结果;生产环境中一般与Level-1结合使用:composer dump-autoload -o --apcu

参考:
https://getcomposer.org/doc/04-schema.md#autoload
https://getcomposer.org/doc/articles/autoloader-optimization.md
composer autoload 自动加载性能优化指南

你可能感兴趣的:(【Composer】自动加载 autoload)