composer autoload

Composer 架构:

name   包名

type 安装类型  

    library: 这是默认类型,它会简单的将文件复制到 vendor 目录

   project: 这表示当前包是一个项目,而不是一个库。

   metapackage: 当一个空的包,包含依赖并且需要触发依赖的安装,这将不会对系统写入额外的文件。

   composer-plugin: 一个安装类型为 composer-plugin 的包,它有一个自定义安装类型,可以为其它包提供一个 installler。

require 依赖  

"require": {
    "php": ">=5.3.2"
},

自动加载映射 autoload

  提供如下自动加载类型

    classmap
    psr-0
    psr-4
    files
理论上来说,项目代码用 psr-4 自动加载, helper 用 files 自动加载,development 相关用 classmap 自动加载。 psr-0 已经被抛弃了,不过有些历史遗留依然在用,所以偶尔也会看到。

"name": "phpunit/phpunit",
"autoload": {
    "classmap": [
        "src/"
    ]
},
代码目录为:vendor/phpunit/phpunit/src. classmap引用的所有类,都会在 install/update 过程中生成,并存储到 vendor/composer/autoload_classmap.php 文件中。这个 map 是经过扫描指定目录(或精确到文件)所有的 .php 和 .inc 文件里内置的类而得到的。

"name": "doctrine/inflector",
"autoload": {
    "psr-0": { "Doctrine\\Common\\Inflector\\": "lib/" }
},
代码目录为: vendor/doctrine/inflector/lib/Doctrine/Common/Inflector/. psr-0 的标准主要考虑到了 <5.2 的 php 中 类似 Acme_Util_ClassName 这样的写法, 会把下划线分解成目录。

"name": "illuminate/database",
"autoload": {
    "psr-4": {
        "Illuminate\\Database\\": ""
    }
},
代码目录为:vendor/illuminate/database/。 psr-4 不在解析类中的下划线,命名空间相当于目录结构。

"name":         "paragonie/random_compat",
"autoload": {
    "files": ["lib/random.php"]
}

可能会有一些全局的 helper function 的存在。

autoload_real.php

不管是哪种加载方式,最终生成命名空间跟目录的映射。 在composer/autoload_real中 直接 require 所有在 autoload_files 中的文件,将 composer cli 生成的各种 autoload_psr4, autoload_classmap, autoload_namespaces(psr-0) 全都注册到 Composer\ClassLoader 中(包含命名空间和类)。 实际遇到类不存在时,先查找 autoload_classmap中注册的类,然后Psr-4查找,最后psr-0查找。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值