permafrost-dev/php-code-search

搜索PHP代码中的函数和方法调用、变量赋值等

1.12.0 2024-09-03 04:33 UTC

README

php-code-search logo

Package Version Downloads license Test Run Status code coverage

直接从PHP中搜索PHP源代码中的函数和方法调用、变量赋值、类等。

安装

composer require permafrost-dev/php-code-search

搜索

要搜索文件,请使用 search 方法。它的唯一参数可以是包含有效文件名的字符串或 \Permafrost\PhpCodeSearch\Support\File 的实例。

要搜索字符串,请使用 searchCode 方法。

搜索方法返回一个 Permafrost\PhpCodeSearch\Results\FileSearchResults 的实例,该实例具有一个 results 属性。

每个 result 是一个具有以下属性的 Permafrost\PhpCodeSearch\Results\SearchResult 的实例

  • node - 找到的特定项
    • node->name(): string
  • location - 项在文件中的位置
    • location->startLine(): int
    • location->endLine(): int
  • snippet - 包含结果行的代码行的片段
    • snippet->toString(): string
  • file() (方法) - 提供对搜索的文件的访问

搜索

要搜索字符串或文件中的代码,请使用 Searcher

use Permafrost\PhpCodeSearch\Searcher;

$searcher = new Searcher();

要搜索文件,请使用 search 方法,并使用 searchCode 方法搜索代码字符串。

$searcher
    ->functions(['strtolower', 'strtoupper'])
    ->search('./file1.php');

$searcher
    ->variables(['/^one[A-Z]$/'])
    ->searchCode('<?php $oneA = "1a";');

使用任何可用的方法进行搜索时,可以使用正则表达式,方法是使用斜杠 / 包围名称,例如 /test\d+/

变量名

要按名称搜索变量,请使用 variables 方法。

$results = $searcher
    ->variables(['twoA', '/^one.$/'])
    ->searchCode('<?php '.
    '    $oneA = "1a";'.
    '    $oneB = "1b";'.
    '    $twoA = "2a";'.
    '    $twoB = "2b";'.
    '');
    
foreach($results->results as $result) {
    echo "Found '{$result->node->name()}' on line {$result->location->startLine}" . PHP_EOL;
}

函数

要搜索函数调用或定义,请使用 functions 方法。

// search for references AND definitions for 'strtolower' and/or 'myfunc'
$searcher
    ->functions(['strtolower', 'myfunc'])
    ->search('file1.php');

方法调用

要按名称搜索方法调用,请使用 methods 方法。

方法调用节点具有一个 args 属性,可以循环遍历以检索方法调用的参数。

$results = $searcher
    ->methods(['/test(One|Two)/'])
    ->searchCode('<?php '.
      '    $obj->testOne("hello world 1"); '.
      '    $obj->testTwo("hello world", 2); '.
      ''
    );
    
foreach($results->results as $result) {
    echo "Found '{$result->node->name()}' on line {$result->location->startLine}" . PHP_EOL;

    foreach($result->node->args as $arg) {
        echo "  argument: '{$arg->value}'" . PHP_EOL;
    }
}

静态调用

要搜索静态方法或属性调用,请使用 static 方法。

有效的搜索词可以是类名,如 Cache,或类名和方法名,如 Cache::remember

$searcher
    ->static(['Ray', 'Cache::has', 'Request::$myProperty'])
    ->search('./app/Http/Controllers/MyController.php');

要搜索类定义或由 new 关键字创建的类,请使用 classes 方法。

$searcher
    ->classes(['MyController'])
    ->search('./app/Http/Controllers/MyController.php');

变量赋值

要按变量名搜索变量赋值,请使用 assignments 方法。注意:应省略 $

$searcher
    ->assignments(['myVar'])
    ->search('./app/Http/Controllers/MyController.php');

不带代码片段的结果

要返回不带相关代码片段的搜索结果,请使用 withoutSnippets 方法

$searcher
    ->withoutSnippets()
    ->functions(['strtolower'])
    ->search('file1.php');

测试

./vendor/bin/phpunit

变更日志

请参阅 CHANGELOG 了解最近更改的更多信息。

贡献

请参阅 CONTRIBUTING 了解详细信息。

安全漏洞

请查看 我们的安全策略 了解如何报告安全漏洞。

致谢

许可协议

MIT 许可协议 (MIT)。请参阅 许可文件 了解更多信息。