PhpStorm 2025.3 Help

搜索模板、修饰符和脚本约束

当您构建结构搜索模板时,实际上是在编写脚本。 为简化您的脚本编写过程,PhpStorm 为您提供了一系列预定义的 搜索模板 ,您可以将其用作搜索模板的原型。

现有的 PHP 搜索模板

有关如何访问现有搜索和替换模板列表,请参阅 结构化搜索和替换部分。

有效的搜索或替换模板表示以下支持的语言结构之一:

  • 表达式,例如 "John" . " " . "Doe"

  • 语句或语句序列,例如 $people[] = new Person('Trillian');

  • 类指示符,例如 class Engine implements IEngine

  • 行注释或块注释,例如 /** Created in PhpStorm */。

在搜索模板中,可以使用以下简化:

  • 方法体可以省略。

  • 模板和约束字段中使用短类名(而不是完全限定名)。

  • 使用 class $Class$ 作为模板也可以找到匿名类。

  • 注释和文档注释的模板应包含具有正确注释和 PHPDoc/JSDoc 语法的变量和结构。

每个搜索或替换模板由变量 $variable_name$ 组成,您可以为其添加条件(修饰符)以缩小搜索结果。 修饰符取决于您搜索模板中的变量。

搜索模板预览

计数修饰符

计数 修饰符指定了出现的次数。

例如,在 class $a$ {public function $b$()} 搜索模板中,为 $b$ 变量在 计数 修饰符字段中指定最小值和最大值。 要设置无限的最大计数,请在修饰符字段中提供空值。

计数修饰符

PhpStorm 添加 [0,∞] 到变量中并搜索指定范围的数字。

参考修饰符

参考 修饰符使您可以在变量中引用其他搜索模板。

引用将始终包含预配置或已保存模板的名称,您可以使用自动完成来填写此字段。

例如,您可以定义一个搜索模板来定位类的静态方法,然后在另一个模板中引用它,以检测对这些静态方法的错误实例调用。

参考修饰符

类型修饰符

Type 修饰符为指定的变量添加了一个预期值或表达式类型。

使用以下修饰符值来定位对应类型的变量:

  • string

  • """ int 或 integer """

  • """ double 或 float """

  • boolean

  • array

  • null

要定位特定类的实例,请提供其 FQN,包括前导 \ 作为 Type 修饰符值。

例如,针对 $b$ 变量,请在 \ExampleClass 修饰符字段中键入 Type。

PhpStorm 搜索 ExampleClass 实例化。

在工具窗口中查找类实例化的结果

文本过滤器

文本 修饰符根据正则表达式或纯文本检查变量。

例如,要检测显式的 魔术方法调用,请使用 $a$->$b$() 模板,并为 $b$ 变量在 文本 修饰符中设置 ^__.+$ 正则表达式。

文本修饰符

脚本约束

脚本 修饰符向搜索模板中添加 Groovy 脚本约束。 Script constraints 用于当您搜索某些语言结构时。

例如,具有指定参数数量的构造函数或具有指定可见性修饰符的成员。

在 script constraints 中可以访问模板中使用的所有变量。 当您向变量添加脚本约束时,PhpStorm 会将其与 PSI 树进行匹配,此变量实际上是 PSI 树中的一个 节点。

假设您有一个变量与一个方法匹配,一个 toString() 方法。 那么这个变量实际上是一个 PsiMethod 节点。 检索 variable.parent 将生成一个 PsiClass 节点,等等。 variable.text 然后将为您提供方法的完整文本。 如果您只需要方法的名称,您可以使用 variable.name。

在另一种情况下,结构化搜索和替换变量可能会匹配某些表达式,例如对变量的引用, PsiReferenceExpression。 当然,一个表达式是没有名字的,但检索整个表达式的文本,会给您提供它所引用的变量的名字。

您可以检查以下现有模板中使用的脚本约束语法:

  • 使用常量参数的示例方法调用

  • 类

  • 具有无参数构造函数的类

  • 非 final 的静态字段

  • 未实现或未扩展的接口

  • 字段/变量读取

  • 具有给定名称模板的字段/变量已更新

最后修改日期: 2025年 12月 5日