psr-4映射是静态查表而非运行时推断,需严格匹配命名空间前缀(结尾反斜杠)、路径末尾斜杠及大小写,修改composer.json后必须执行composer dump-autoload -o生效。

能直接用 composer init 创建,但关键不在初始化,而在 autoload 配置和命名空间映射是否真正生效——很多包“装上了却用不了”,问题就出在这儿。
怎么写对 composer.json 的 autoload 配置
PSR-4 映射必须严格匹配实际目录结构和类声明的命名空间,少一个反斜杠、多一个空格、大小写不一致都会导致自动加载失败。
-
"autoload": {"psr-4": {"WebUtil\": "src/"}}表示所有以WebUtil开头的类,都从项目根目录下的src/目录开始找文件路径 - 如果类定义是
class CURLUtil extends BaseCurl,且在src/CURLUtil.php,那它的完整命名空间必须是WebUtilCURLUtil,不能是webutilCURLUtil或WebUtilcURLUtil - 别把
"src/": "src/"写成"src/": "src"(末尾缺斜杠),Windows 下尤其容易因路径缓存导致 IDE 跳转失效 - 改完
composer.json后,一定要运行composer dump-autoload -o生成优化映射,否则新配置不生效
为什么 use 语句报错或 IDE 提示“Undefined class”
现象是代码能跑通,但 PHPStorm/VS Code 找不到类、无法跳转、没有类型提示。这不是 Composer 安装失败,而是自动加载配置与 IDE 索引没对齐。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 确认
composer.json中autoload的psr-4键值对里,命名空间结尾有反斜杠("WebUtil\"),路径值以斜杠结尾("src/") - 运行
composer dump-autoload -o后,重启 IDE 并手动触发索引重建(VS Code:Ctrl+Shift+P → “Index workspace”) - 如果你在本地开发这个包(即不是通过
composer require安装,而是composer install后直接改src/),确保项目根目录下有vendor/autoload.php且已引入——否则 IDE 不会扫描你自己的源码目录
发布前必须检查的三个硬性条件
Packagist 接收并索引你的包,只认三件事:名字唯一、composer.json 合法、Git 仓库可公开访问。漏掉任一,submit 就会失败或包不可见。
-
"name"字段格式必须是vendor/package(全小写,仅含字母、数字、中划线、下划线),例如"apptut/web-util";不能是"Apptut/WebUtil"或"apptut/webutil" -
"autoload"必须存在且非空,哪怕只是{"psr-4": {"": "src/"}}(适用于无命名空间的简单工具函数) - GitHub/GitLab 仓库需设为 public,且主分支(通常是
main或master)根目录下必须有有效的composer.json—— Packagist 不会拉取 tag 或其他分支来校验
最常被忽略的是:你在本地 require 自己的包时,如果用的是 dev-main 这类开发版本,下游项目必须显式允许不稳定版本,否则 composer require 会静默跳过。这不是 bug,是 Composer 的稳定性守门机制在起作用。










