Skip to main content

Command Palette

Search for a command to run...

PhpStorm meta 的高级用法示例

Published
1 min readView as Markdown
PhpStorm meta 的高级用法示例
H

I am ZhangSan, a mere nobody. 我是张三,一个无名小子。

对于一些自研框架或容器注入类函数,我们可以通过高级用法,使用元数据 metadata 的方式手动添加重写规则,用来指示和明确自动完成的关系,从而完成代码提示和跳转跟踪

使用方法

在项目根目录新增文件 .phpstorm.meta.php

文件是 PHP 的写法,示例内容如下:

<?php

namespace PHPSTORM_META {
    // metadata directives

    // 指示 D 方法 重写函数
    override(\D(0), map([
        'Agent' => \AgentModel::class,
        'User' => \UserModel::class,
    ]));
    // 指示 X 方法
    override(\X(0), map([
        'Agent' => \AgentService::class,
        'AgentTransfer' => \AgentTransferService::class,
    ]));
}

其他更多指令示例请移步官方文档:create-metadata-files-inside-your-project

规则定义

.phpstorm.meta.php 文件中,需要声明 PHPSTORM_META 命名空间,并提供元数据指令。这些指令用于指定如何处理特定的函数或方法。以下是一些常见的元数据指令:

  • override() :覆盖函数或方法的行为。

  • map() :映射参数到特定的类型或值。

  • type() :指定参数的类型。

  • expectedArguments() :指定函数或方法的预期参数类型。

  • exitPoint() :指定函数或方法的退出点。

这些指令使用 PHP 代码编写,因此可以利用 PhpStorm 的代码编辑器功能,如代码自动完成、指示和重构等。

More from this blog

git切换分支缓慢问题

背景 最近在项目中 test 分支与 master 分支切换时感到非常慢,大概需要1-2分钟 解决 找出两个分支的最大的差异 # 找出两个分支的差异 git diff --dirstat=files master..test # 输出 98.7% vendor/alipaysdk/openapi/v2/aop/request/ 分别检出两个分支到不同目录,经过比较发现文件主要差异为行尾表现不同,master 分支的文件为 LF、test 分支的为 CRLF。 处理方案 使用 .gitatt...

Feb 10, 20261 min read5

软件生产范式: 从 Ddd 到 Sdd + Tdd 的未来之路

未来的软件系统,很可能不再依赖大量手写的代码,而是依赖可验证的业务规范,以及对这些规范的自动化实现。——这正是从 DDD → SDD + TDD 的演进方向。 在 AI 深度参与软件开发的时代,传统的代码中心开发方式正在加速老化。我们正在经历一次结构性转变:从“写代码”转向“写规范 + 写测试 + 让 AI 自动补全逻辑”。 这篇文章试图提供一个前瞻性的观点(深度使用 vibe coding 近

Dec 9, 20253 min read35
软件生产范式: 从 Ddd 到 Sdd + Tdd 的未来之路

多项目部署时使用不同node版本与包管理器

nvm 项目地址:https://github.com/nvm-sh/nvmcorepack 项目地址:https://github.com/nodejs/corepack#readme 场景 前端多项目依赖不同的 nodejs 版本和不同的包管理器(npm、yarn、pnpm) 解决方案 1、依赖不同 nodejs 版本使用 nvm 来解决,项目中新增 .nvmrc 来指定版本号 2、针对不同包管理器的问题使用node自带的 corepack 来解决 # 使用指定版本 node nvm us...

Nov 5, 20251 min read2

hello1024

46 posts