PhpStorm 2025.2 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

  • """ intinteger """

  • """ doublefloat """

  • 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年 9月 26日