在自建的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目录下:
这里很简单的调用示例: