首先创建符合PSR-4规范的Composer包需正确设置文件结构与composer.json配置。1. 建立项目目录如my-string-utils,包含src、tests、composer.json等;2. 在src/StringUtils.php中定义命名空间MyVendor\StringUtils并编写类;3. 配置composer.json的autoload.psr-4项为"MyVendor\StringUtils\": "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 中定义类:
这个类属于命名空间
MyVendor\StringUtils,所以它应位于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 example.php,如果输出正确,说明PSR-4配置成功。发布到Packagist(可选)
将代码推送到GitHub/GitLab等平台,然后访问 Packagist 提交你的包。之后其他开发者就可以通过:
composer require my-vendor/string-utils来使用你的库。
基本上就这些。只要命名空间、目录结构和composer.json配置三者一致,就能轻松实现PSR-4兼容。保持结构清晰,未来扩展也更容易。











