首页 > 学院 > 开发设计 > 正文

composer autoload

2019-11-08 19:27:17
字体:
来源:转载
供稿:网友

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查找。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表