composer 引入扩展解析

composer 引入扩展解析

PSR 规范

PHP FIG


PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准。


PHP FIG,FIG 是 Framework Interoperability Group(框架可互用性小组)的缩写,由几位开源框架的开发者成立于 2009 年,从那开始也选取了很多其他成员进来(包括但不限于 Laravel, Joomla, Drupal, Composer, Phalcon, Slim, Symfony, Zend Framework 等),虽然不是「官方」组织,但也代表了大部分的 PHP 社区。


项目的目的在于:通过框架作者或者框架的代表之间讨论,以最低程度的限制,制定一个协作标准,各个框架遵循统一的编码规范,避免各家自行发展的风格阻碍了 PHP 的发展,解决这个程序设计师由来已久的困扰。


目前已表决通过了不少套标准,已经得到大部分 PHP 框架的支持和认可。


本项目的主要面向对象是所有参与的各个成员(也就是各自框架的社区),这里是完整的 成员列表,当然,同时也欢迎其它 PHP 社区采用本规范。

  • 统一编码规范,减少学习成本。

PSR-0 自动加载标准(已废弃,一些旧的第三方库还有在使用)


PSR-1 基础编码标准

PSR-2 编码风格向导

PSR-3 日志接口

PSR-4 自动加载的增强版,替换掉了 PSR-0

PSR-6 缓存接口规范

PSR-7 HTTP 消息接口规范

具体详细的规范标准可以查看 PHP 标准规范

PSR-4 自动加载规范

  1. 术语「class」指的是类(classes)、接口(interfaces)、特征(traits)和其他类似的结构。
  2. 全限定类名具有以下形式:


    \<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>

    • 完全合格的类名称必须具有顶级名称空间名称,也称为"vendor namespace"。
    • 完全合格的类名称可以具有一个或多个子命名空间名称。
    • 完全合格的类名称必须具有终止类名称。
    • 下划线在完全限定的类名的任何部分中没有特殊含义。
    • 完全限定的类名中的字母字符可以是小写和大写的任意组合。
    • 所有类名必须以区分大小写的方式引用。

  3. 全限定类名的加载过程
    • 在全限定的类名(一个「命名空间前缀」)中,一个或多个前导命名空间和子命名空间组成的连续命名空间,不包括前导命名空间的分隔符,至少对应一个「根目录」。
    • 「命名空间前缀」后面的相邻子命名空间与根目录下的目录名称相对应(且必须区分大小写),其中命名空间的分隔符表示目录分隔符。
    • 最终的类名与以.php结尾的文件名保持一致,这个文件的名字必须和最终的类名相匹配(意思就是如果类名是 FooController,那么这个类所在的文件名必须是 FooController.php)。
  4. 自动加载文件禁止抛出异常,禁止出现任何级别的错误,也不建议有返回值。

PSR-4 自动加载规范

composer.json 中的 autoload

psr一种规范 在项目中composer 怎样才能加载到文件,关键的原因是 composer.json 文件中的autoload 来定义使用的规范和目录.
composer.json 目前支持 psr-4 psr-0 files classmap

PSR-4

install/update 过程中,所有PSR-4引用都合并到一个键=>值数组中,储存在vendor / composer / autoload_psr4.php

{
    "autoload": {
        "psr-4": {
            "Monolog\\": "src/",
            "Vendor\\Namespace\\": ""
        }
    }
}
{
    "autoload": {
        "psr-4": { "Monolog\\": ["src/", "lib/"] }
    }
}
{
    "autoload": {
        "psr-4": { "": "src/" }
    }
}

PSR-0

install/update 过程中,所有PSR-0引用都结合为一个单一的键值对数组,存储至vendor/composer/autoload_namespaces.php中。

{
    "autoload": {
        "psr-0": {
            "Monolog\\": "src/",
            "Vendor\\Namespace\\": "src/",
            "Vendor_Namespace_": "src/"
        }
    }
}

Classmap

classmap引用的所有组合,都会在 install/update过程中生成,并存储到vendor/composer/autoload_classmap.php文件中

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

Files

如果你想要明确的指定,在每次请求时都要载入某些文件,那么你可以使用 ‘files’ autoloading。通常作为函数库的载入方式(而非类库)。

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

更多详情查看 composer.json 架构

执行 composer require 时发生了什么?

  • composer 会找到符合 PR4 规范的第三方库的源
  • 将其加载到 vendor 目录下
  • 初始化顶级域名的映射并写入到指定的文件里

参考文献

PHP 标准规范

PSR-4 自动加载规范

composer.json 架构

深入解析 composer 的自动加载原理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值