首先创建符合PSR-4规范的Composer包需正确设置文件结构与composer.json配置。1. 建立项目目录如my-string-utils,包含src、tests、composer.json等;2. 在src/StringUtils.php中定义命名空间MyVendorStringUtils并编写类;3. 配置composer.json的autoload.psr-4项为"MyVendorStringUtils": "src/",确保命名空间与路径映射一致;4. 执行composer install生成自动加载文件;5. 通过example.php引入vendor/autoload.php测试类加载;6. 可选发布至Packagist供他人使用。只要三者一致即可实现兼容。

要创建一个符合PSR-4规范的Composer包,关键在于正确组织文件结构、配置composer.json并遵循PHP自动加载标准。下面一步步说明如何从零开始构建一个规范的Composer包。
理解PSR-4与自动加载机制
PSR-4是PHP框架互操作性小组制定的自动加载标准,它定义了类文件如何根据命名空间映射到目录结构。相比PSR-0,PSR-4更简洁高效,仅支持命名空间前缀映射,不包含下划线转目录等旧规则。
核心原则是:命名空间前缀对应项目中的一个根目录,类文件放在与子命名空间对应的子目录中,文件名必须与类名一致(驼峰命名 + .php后缀)。
初始化项目结构
假设我们要创建一个名为 my-vendor/string-utils 的包,提供一些字符串处理工具。先创建基本目录:
立即学习“PHP免费学习笔记(深入)”;
/my-string-utils├── src/
│ └── StringUtils.php
├── tests/
│ └── StringUtilsTest.php
├── composer.json
└── README.md
其中:
编写符合PSR-4的代码示例
在 src/StringUtils.php 中定义类:
<?php
namespace MyVendorStringUtils;
class StringUtils
{
public static function capitalize(string $str): string
{
return ucfirst(strtolower($str));
}
}
这个类属于命名空间 MyVendorStringUtils,所以它应位于 src/ 目录下,并且路径与命名空间匹配(即没有额外子目录,因为最后一级就是类名)。
配置 composer.json 支持 PSR-4
运行 composer init 初始化配置,或手动创建 composer.json 文件:
{
"name": "my-vendor/string-utils",
"type": "library",
"description": "A simple string utility library",
"license": "MIT",
"authors": [
{
"name": "Your Name",
"email": "you@example.com"
}
],
"require": {},
"autoload": {
"psr-4": {
"MyVendor\StringUtils\": "src/"
}
},
"minimum-stability": "stable"
}
注意:
- autoload.psr-4 中的键是完整的命名空间前缀,值是相对于项目根目录的源码路径
- 命名空间中的反斜杠在JSON中需转义为双反斜杠
- 路径以斜杠结尾
验证自动加载是否生效
安装依赖并生成自动加载文件:
composer install
然后创建一个测试脚本 example.php:
<?php
require_once 'vendor/autoload.php';
use MyVendorStringUtilsStringUtils;
echo StringUtils::capitalize('hello world'); // 输出: Hello world
运行 php example.php,如果输出正确,说明PSR-4配置成功。
发布到Packagist(可选)
将代码推送到GitHub/GitLab等平台,然后访问 Packagist 提交你的包。之后其他开发者就可以通过:
composer require my-vendor/string-utils
来使用你的库。
基本上就这些。只要命名空间、目录结构和composer.json配置三者一致,就能轻松实现PSR-4兼容。保持结构清晰,未来扩展也更容易。











