Composer本身不提供类型提示和文档生成功能,它仅是依赖管理工具;类型提示和文档实际由IDE、PHPStan或phpDocumentor等工具基于源码中的PHPDoc和PHP 8+类型声明生成。

Composer 本身不提供类型提示和文档生成功能
Composer 是依赖管理工具,不是代码分析器或文档生成器。它不解析 PHP 代码、不读取 @param 注释、也不生成 __construct() 的参数类型提示。你看到的“类型提示”和“文档”实际来自 IDE(如 PHPStorm)、静态分析工具(如 PHPStan)或文档生成器(如 phpDocumentor),它们读取的是源码中的 PHPDoc 和 PHP 8+ 类型声明,而非 composer.json。
在 composer.json 中声明 autoload 才能让类型提示生效
IDE 和分析工具需要准确知道类文件位置,才能索引方法签名和注释。如果 autoload 配置错误,即使写了完整的 PHPDoc,PHPStorm 也识别不了 MyService::handle() 的返回类型。
- 用
"psr-4"时确保命名空间与目录结构严格匹配:"App\": "src/"意味着AppFooBar必须位于src/Foo/Bar.php - 避免混用
psr-4和classmap覆盖同一命名空间,会导致 IDE 加载冲突 - 开发包时,在
composer.json中加上"autoload-dev"并包含tests/和stubs/,方便测试类和存根被分析工具识别
用 phpdocumentor/phpdocumentor 生成文档需额外配置
phpDocumentor 不从 Composer 自动读取配置,必须显式指定源码路径和目标格式。它不会扫描 vendor/ 下的包,除非你手动把它加进 phpdoc.xml 的 <source></source>。
- 安装后运行
phpdoc -d src -t docs/api,其中-d是源码目录,-t是输出目录 - 若项目用了 PHP 8.0+ 的联合类型(如
string|int)或属性类型(public string $name),确保 phpDocumentor 版本 ≥ 3.3,否则会跳过或报错 - 生成的 HTML 文档里,函数参数类型来自 PHP 代码本身(如
function foo(string $id): array),不是composer.json里的任何字段
想让下游用户获得更好类型体验?重点做三件事
类型提示和文档的“感知质量”,取决于包作者是否把基础信息写清楚、结构是否规整、是否兼容主流工具链。这不是 Composer 的事,但 Composer 配置是起点。
- 在
composer.json的type字段填准确值,比如"type": "library"或"type": "wordpress-plugin",部分 IDE 和分析工具会据此启用特定规则 - 确保
autoload包含所有公开 API 文件,漏掉src/Contracts/就会导致接口方法无提示 - 发布前运行
composer dump-autoload --optimize,生成优化后的类映射,加快 IDE 索引速度(尤其对大型包)
最常被忽略的一点:PHPDoc 中的 @return 如果写成 @return MyCollection|iterable,而没定义 MyCollection 的完整命名空间或没被 autoload 覆盖,PHPStan 就会报 Unknown class —— 这问题看似是文档写的不对,根子却在 autoload 配置漏了。


















