PhpStorm 2021.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,∞]到变量并搜索指定的数字范围。

参考过滤器

Reference过滤器允许您在变量中引用其他一些搜索模板。

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

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

参考过滤器

类型过滤器

类型过滤器添加指定变量所需的值或表达式的类型。

使用以下过滤器值来定位相应类型的变量:

  • string

  • int要么integer

  • double要么float

  • boolean

  • array

  • null

要定位特定类的实例,请提供其 FQN,包括前导\作为类型过滤器值。

例如,对于$b$变量,\ExampleClass类型过滤器字段中键入。

PhpStorm 搜索ExampleClass实例化。

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

文本过滤器

文本过滤器根据正则表达式或纯文本检查变量。

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

文本过滤器

脚本约束

脚本过滤器将Groovy 脚本约束添加到搜索模板。搜索某些语言结构时会使用脚本约束。

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

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

比方说,你有一个变量匹配一个方法,一个toString()方法。那么这个变量实际上就是一个PsiMethod节点。检索variable.parent将产生一个PsiClass节点,依此类推。variable.text然后会给你方法的整个文本。如果只需要方法名,可以使用variable.name.

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

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

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

  • 班级

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

  • 非最终的静态字段

  • 未实现或未扩展的接口

  • 字段/变量读取

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

最后修改:2021 年 9 月 21 日