必须配置PHP解释器、启用Psalm插件、规范使用@template等注解,三者缺一不可;否则数组形状、泛型、@var补全均失效。
PhpStorm 默认就开启基础类型推断,但要真正用上 数组形状、@template 泛型、@var 注解补全等高级能力,必须手动配齐三样东西:PHP 解释器、Psalm 插件、类型注解习惯。
@var 还没补全?先检查 PHP 解释器是否生效没有解释器,PhpStorm 就是“睁眼瞎”——它连 array 是什么、DateTime 有哪些方法都不知道。类型推断不是纯静态猜的,它严重依赖解释器提供的函数签名和类结构。
File → Settings → Languages & Frameworks → PHP,确认 CLI Interpreter 已指向真实 PHP 可执行文件(如 /usr/bin/php 或 C:\xampp\php\php.exe)…,看“Loaded extensions”里有没有 json、mbstring 等常见扩展;若为空或报错,说明路径不对或 PHP 损坏test.php,写 ,按 Ctrl + Space —— 如果没弹出方法列表,解释器就没通PhpStorm 对 array 或 #[ObjectShape] 的支持,底层靠的是 Psalm 插件。它虽默认捆绑,但可能被手动禁用,或在旧项目中未激活。
Settings → Plugins,搜索 Psalm,确保 PHP Psalm Language Support 已勾选并启用/** @var array{foo: string, bar: int} $data */ $data = [];,然后输入 $data[',看是否自动提示 foo 和 bar
Reload project from composer.json,强制刷新类型索引@template + 正确 PHPDoc 格式泛型不是写个 class Collection 就能推断的,必须配合 Psalm 风格注解,且注解位置不能错。
@template 必须写在类声明上方的 PHPDoc 块里,不能放在构造函数或方法里@param/@return 显式绑定模板变量,例如:/** @template T */
class Box
{
/** @var T */
private $value;
/** @param T $value */
public function __construct($value) { $this->value = $value; }
/** @return T */
public function get() { return $this->value; }}
new Box('hello'))把 get() 返回值识别为 string
class Box 语法,但 PhpStorm 当前(2026 年初)仍更稳定兼容 Psalm 注解风格类型推断链条很脆弱:文件没被识别为 PHP、类没正确声明命名空间、vendor 没索引——任一环节断掉,补全就失效。
Plain Text?立刻右键编辑器标签页 → Override File Type → PHP
.php 后缀已注册到 PHP 类型:进入 Settings → Editor → File Typ
es,查 PHP 类型下的 Registered Patterns 是否含 *.php
vendor/ 目录未被排除(右键 → Mark Directory as → Not Excluded),否则 Illuminate\Http\Request 这类类名永远标红Empty File,一定要选 PHP File,否则 IDE 不自动加 和命名空间模板
最常被跳过的其实是“重启 + 重建索引”:改完解释器或插件后,仅靠 Invalidate Caches and Restart 不够,有时得额外执行 File → Reload project from disk,让 PhpStorm 重新扫描所有 .php 文件和注解结构。