10月13, 2016

psr-4与composer

PSR-4

PSR标准的作用

在团队开发中,保持项目代码可读性和统一性的方法就是研发前要制定好标准(如变量、目录命名标注,代码文件排布标准等等),但不同的工程师研发习惯可能千差万别,因此为了避免在制定标准的过程中工程师们拔枪相向,为了不违背工程师们一致对外的原则(外通常指产品经理,运营等需求方),我们最好的方法就是找一个德高望重的第三方标准,大家一起遵守它,这时PSR标准就闪亮登场了。

PSR[0-3]

本文重点不在psr0-3上,这里简单介绍下

  1. PSR-0 (Autoloading Standard) 自动加载标准

  2. PSR-1 (Basic Coding Standard) 基础编码标准

  3. PSR-2 (Coding Style Guide) 编码风格向导

  4. PSR-3 (Logger Interface) 日志接口

PSR-4

说明

同psr-0一样,也是一种自动加载的规范。包括自动载入的类对应的文件存放路径规范。

规则定义

  1. 此处的“类”泛指所有的class类、接口、traits可复用代码块以及其它类似结构。

  2. 一个完整的类名需具有以下结构:

    \<命名空间>(\<子命名空间>)*\<类名>

    • 完整的类名必须要有一个顶级命名空间,被称为 "vendor namespace";
    • 完整的类名可以有一个或多个子命名空间;
    • 完整的类名必须有一个最终的类名;
    • 完整的类名中任意一部分中的下滑线都是没有特殊含义的;
    • 完整的类名可以由任意大小写字母组成;
    • 所有类名都必须是大小写敏感的。
  3. 当根据完整的类名载入相应的文件……

    • 完整的类名中,去掉最前面的命名空间分隔符,前面连续的一个或多个命名空间和子命名空间,作为“命名空间前缀”,其必须与至少一个“文件基目录”相对应;
    • 紧接命名空间前缀后的子命名空间必须与相应的”文件基目录“相匹配,其中的命名空间分隔符将作为目录分隔符。
    • 末尾的类名必须与对应的以 .php 为后缀的文件同名。
    • 自动加载器(autoloader)的实现一定不能抛出异常、一定不能触发任一级别的错误信息以及不应该有返回值。

举例说明

完整类名 命名空间前缀 文件基目录 文件路径
\Acme\Log\Writer\File_Writer Acme\Log\Writer ./acme-log-writer/lib/ ./acme-log-writer/lib/File_Writer.php
\Aura\Web\Response\Status Aura\Web /path/to/aura-web/src/ /path/to/aura-web/src/Response/Status.php
\Symfony\Core\Request Symfony\Core ./vendor/Symfony/Core/ ./vendor/Symfony/Core/Request.php
\Zend\Acl Zend /usr/includes/Zend/ /usr/includes/Zend/Acl.php

composer中psr-4的实现

我们直接看composer的配置文件

{
    "autoload": {
    "psr-4": {
        "Foo\\": "src/",
        }
    }
}

当你使用Foo\Bar\Test,他就会自动加载src/Bar/Test.php,通常我们看到的composer插件目录规范都是这样的。

本文链接:http://www.qiana.info/post/guifan.html

-- EOF --

Comments