必须用 --dev 安装,因 psalm 是纯开发期工具,装入 require 会导致生产环境引入 dev 依赖、--no-dev 时失效及部署被拒。

composer require --dev vimeo/psalm 是唯一推荐的安装方式,全局安装或 PHAR 方式会绕过项目级 autoloader 和依赖约束,导致类型分析失真。
为什么必须用 --dev 安装?
Psalm 是纯开发期工具,不参与运行时逻辑。若装进 require(而非 require-dev),会导致:
• 生产环境意外引入大量 dev-only 依赖(如 phpunit、symfony/console 等 Psalm 自身依赖)
• composer install --no-dev 时 Psalm 失效,CI 流程断裂
• 某些部署脚本因检测到非生产依赖而拒绝上线
psalm --init 后必须手动检查的三处配置
自动生成的 psalm.xml 常有路径错位或语义偏差:
• <directory name="src"></directory> → 实际源码在 app/ 或 lib/?必须改
• errorLevel="4" → 新项目建议设为 1,否则漏掉 InvalidReturnType、MissingParamType 等关键问题
• resolveFromConfigFile="true" 缺失 → 不加这句,Psalm 可能忽略你写的 <stubs></stubs> 或插件配置
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
Composer autoloader 怎么被 Psalm 正确识别?
Psalm 默认读取 vendor/autoload.php,但前提是你的项目 composer.json 中 autoload 配置有效:
• 运行过 composer dump-autoload(尤其新增了 PSR-4 映射后)
• autoload-dev 下的测试类不会被自动加载 → 若需分析 tests/,得在 psalm.xml 里显式加 <directory name="tests"></directory>
• 不要用 autoloader="custom/autoloader.php" 覆盖默认行为,除非你确认 Composer 的 autoload 已损坏;多数“类找不到”报错其实是 dump-autoload 没跑,不是 Psalm 配置问题
常见报错:Unable to resolve class Xyz 怎么快速定位?
这不是 Psalm 的 bug,而是 autoload 链路断了:
• 先执行 php -r "var_dump(class_exists('Xyz'));" —— 如果返回 false,说明 Composer 根本没注册这个类
• 检查 composer.json 的 autoload 是否拼错命名空间或路径
• 第三方包(如 ext-redis)没有 PHP 类文件 → 此时才该用 <stubs></stubs>,且必须手写完整 stub 文件并显式声明在 psalm.xml 中,不能只放目录










