在gitlab创建项目

在自建的gitlab上创建一个叫做 php-common 的项目。

希望发布一个包叫做 "baidu/common",因此我们依旧通过composer init来初始化一个composer.json:

{
  "name": "baidu/common",
  "description": "common utility for php team",
  "type": "library",
  "license": "MIT",
  "authors": [
    {
      "name": "owenliang",
      "email": "owenliang@baidu.com"
    }
  ],
  "minimum-stability": "stable",
  "require": {}
}

该包当然也可以通过require来依赖其他的包,即二级依赖。

composer包名是name指定的,与gitlab项目名无关。

开发库代码

composer包建议把源代码放在src目录下:

我希望整个包下的所有class文件,均采用baidu\common的命名空间前缀。

以src/Author.php为例:

<?php

namespace baidu\\common;

class Author
{
    public static function name() {
        return 'baidu@2018';
    }
}

配置类自动加载

为了composer可以找到加载到baidu\common\Author这个类,需要在composer.json中定义"命名空间前缀"与"类文件路径"之间的关系。

{
  "name": "baidu/common",
  "description": "common utility for php team",
  "type": "library",
  "license": "MIT",
  "authors": [
    {
      "name": "owenliang",
      "email": "owenliang@baidu.com"
    }
  ],
  "minimum-stability": "stable",
  "require": {},
  "autoload": {
    "psr-4": {
      "baidu\\\\common\\\\": "src"
    }
  }
}

我们遵循psr-4类加载规范,以baidu\common命名空间为前缀的class,会在src目录下查找。

当其他项目调用baidu\common\Author类时,composer会在 vendor/baidu(组织名)/common(包名)/src/ 下加载Author.php文件。

编写测试

composer建议把测试代码放在test目录下:

这里很简单的调用示例: