composer的自动加载机制

composer支持四种自动加载的方式:PSR-0 / PSR-4 /Classmap / Files , 其中 PSR-4 是当前推荐的加载方式。

什么是 PSR ?

PSR 是 PHP Standards Recommendations(PHP 标准建议)的缩写

  1. Files 是最简单的加载方式,这种方式不管加载的文件是否用到始终都会加载,而不是按需加载

修改项目根目下的composer.json, 加入 "autoload" 项:

{
    "require": {
        "monolog/monolog": "1.0.*"
    },
    "autoload": {
        "files": ["controllers/Controller.php"]
    }
}

需要加载哪个文件,直接写入文件路径即可,路径相对项目的根目录。然后执行composer dump-autoload,该命令可以遍历我们项目根目录以及各依赖库下的 composer.json 文件然后重新生成 vendor/composer/autoload_* 跟自动加载相关的配置文件(运行 composer dump-auto 重新注册自动加载映射关系)。
composer dump-autoload 之后composer会把配置值写入与 Files加载方式对应的 vendor/composer/autoload_files.php 配置文件中。

  1. Classmap 加载方式也很简单,composer会搜寻我们指定的目录或文件,并把搜寻到的结果写到Classmap对应的 vendor/composer/autoload_classmap.php 配置文件中。 修改composer.json :
{
    "require": {
        "monolog/monolog": "1.0.*"
    },
    "autoload": {
        "classmap": ["controllers/"]
    }
}

以上配置会让composer搜寻 controllers 目录下的所有类,并生成配置文件,同样先 composer dump-autoload 下

  1. PSR-0 ,这种加载方式已经过时,所以不推荐在新项目中使用,请用 PSR-4 来代替它。
    修改composer.json 如下, 然后执行composer dump-autoload
{
    "require": {
        "monolog/monolog": "1.0.*"
    },
    "autoload": {
        "psr-0": {"controllers\": ""}
    }
}

以上配置的意思是指定 controllers命名空间 所在的父级目录,由于controllers命名空间所在的父级目录就是项目根目录, 所以配置值用 "" ,composer dump-autoload后配置会写入 PSR-0对应的 vendor/composer/autoload_namespaces.php 配置文件中

  1. PSR-4 是 PSR-0 的升级版,是目前推荐的自动加载方式,这种方式使用的是按需加载。

修改composer.json 如下:

    "require": {
        "monolog/monolog": "1.0.*"
    },
    "autoload": {
        "psr-4": {"controllers\": "controllers/"}
    }
}

注意和PSR-0 的 composer.json 做对比,PSR-4 和 PSR-0 的主要区别是,PSR-4指定的就当作当前命名空间的目录, 而PSR-0 指定的是当前命名空间的父目录。composer dump-autoload 一下, 配置会写入PSR-4对应的 vendor/composer/autoload_psr4.php 文件中

原文地址:https://www.cnblogs.com/caibaotimes/p/13810329.html