根本原因是文件模板中缺失#parse("PHP File Header.php")或PHP Interface模板未单独配置。需确保该行位于类/接口模板首行,且正确设置PHP File Header.php内容与路径;新建interface必须复制并修改PHP Class模板为PHP Interface模板,并调整其排序;实时模板(如phpi)用于文件内快速插入代码块。

PhpStorm 里新建 PHP 类或接口不带命名空间、没 PHPDoc、甚至生成的是 class 而不是 interface,根本原因不是 IDE 抽风,而是「文件模板」和「实时模板」两套机制被混用或配置失效。
为什么新建 PHP 类/接口时命名空间为空?
关键点在 PHP File Header.php 模板的调用:PhpStorm 只有在类模板第一行写了 #parse("PHP File Header.php"),才会解析并替换 $NAMESPACE$。如果漏掉这行,或该文件头模板本身内容为空、路径错误、未启用,$NAMESPACE$ 就永远显示为字面量或留空。
- 检查路径:
Settings → Editor → File and Code Templates → Includes → PHP File Header.php,确认内容含namespace $NAMESPACE$;且非注释状态 - 检查主模板:
PHP Class模板第一行必须是#parse("PHP File Header.php"),不能删、不能挪到第二行 - 修改后必须重启 PhpStorm —— 缓存不刷新,改动不生效
- 确保项目根目录已标记为
Sources(右键目录 →Mark Directory as → Sources Root),否则$NAMESPACE$解析失败
如何让新建 interface 自动生成 interface 而不是 class?
PhpStorm 的「New → PHP Class」菜单项默认只走一套模板,它不会根据文件名后缀自动切换 class/interface/trait 关键字。必须手动区分模板,否则新建 UserServiceInterface.php 还是输出 class UserServiceInterface。
- 进
Settings → Editor → File and Code Templates → Files,复制一份PHP Class模板,重命名为PHP Interface - 把新模板里的
class $NAME$改成interface $NAME$,其他结构(如#parse行、PHPDoc 占位)保持一致 - 在
PHP Interface模板的Files标签下,点击右下角Apply后,再点Move Down,把它排在PHP Class下面——这样右键新建时会多出一个「PHP Interface」选项 - 别依赖「自动识别文件名含 Interface 就生成 interface」——PhpStorm 不做这种推断,必须显式选模板
想在已有文件里快速插入 class/interface 片段?用 Live Template
文件模板只管「新建文件」,而日常写代码更常需要在当前文件里插入方法、接口定义、DTO 类等。这时候靠 Live Templates,不是文件模板。
立即学习“PHP免费学习笔记(深入)”;
- 路径:
Settings → Editor → Live Templates → PHP → + → Live Template - Abbreviation 填
phpi(interface 缩写),Template text 填:interface $NAME$ { $END$ } - 点
Edit variables,给$NAME$设表达式fileNameWithoutExtension(),勾选Skip if defined—— 这样你在UserRepositoryInterface.php里输phpi+Tab,就直接生成interface UserRepositoryInterface { ... } - 同理可建
phpc(class)、phpt(trait),变量逻辑复用,不用重复配 - 注意:必须勾选 PHP 上下文,否则在 .js 或 .html 文件里也会触发
真正卡住人的地方,从来不是「怎么配」,而是不知道 #parse("PHP File Header.php") 是命名空间解析的唯一开关,以及「新建 interface」这个动作必须手动选模板——IDE 不会猜你想要什么,它只按你配的来。这两点漏掉任何一个,新建出来的文件就永远不对味。



















