itrocks / class-use
"这个类在哪里使用,用途是什么?" 的索引和查询库
Requires
- php: >=8.2
Requires (Dev)
- ext-xdebug: *
- itrocks/coding-standard: dev-master
- phpstan/phpstan: ^1.10
- phpstan/phpstan-strict-rules: ^1.5
- phpunit/phpunit: ^10.1
This package is auto-updated.
Last update: 2024-09-06 14:48:17 UTC
README
这个 it.rocks 库给你的软件提供了快速回答 "这个类在哪里使用,用途是什么?" 问题的能力。
它提供编程 API 和命令行来扫描你的 PHP 项目中的类引用,将它们存储到文件系统中的索引类使用缓存中,然后允许你在整个项目中搜索类的使用情况。
它旨在简单易用于任何 PHP 项目,且执行速度快。其代码旨在简单和轻量:无库依赖,我尽量将其限制在尽可能少的抽象层,以便代码易于理解和更新。
先决条件
- 此功能仅适用于 PHP 8.2。我想充分利用当前 PHP 版本的功能。
在 Debian/Ubuntu/Mint 系统上安装 php 8.2:https://php.watch/articles/install-php82-ubuntu-debian。
命令行使用
命令行可用于演示用途和基准测试:它显示操作持续时间、内存使用量和计数器。这使得在不编写源代码的情况下测试库变得容易。
安装
git clone itrocks/class-use # make it available from any directory (Linux systems): sudo ln -s `pwd`/class-use/bin/run /usr/local/bin/class-use
更新缓存
从你的 PHP 项目的任何子目录(例如,从项目根目录这里)
class-use vendor # OR: if you did not add a direct link to the console script, you can do the same with (Linux systems): /path/to/your/clone/of/itrocks/class-use/bin/run vendor # OR: if you have php installed on a non-Linux system (e.g. Windows): php /path/to/your/clone/of/itrocks/class-use/bin/run.php vendor
选项
reset
:完全重新计算你的类使用缓存。如果不设置,则仅扫描自上次更新以来修改的文件进行更新。pretty
:类使用缓存 json 文件将是可读的,包括空格和换行符;尽管如此,缓存文件会更大。vendor
:更新vendor
目录中的 PHP 文件类使用情况。如果不设置,则仅扫描你的项目文件,这将非常快,且仅在你不需要第三方 PHP 脚本类使用信息的情况下才足够。
搜索出现次数
从你的 PHP 项目的任何目录(例如,从项目根目录这里)
class-use type=declare-class use=ITRocks/Class_Use/Index data
此示例将输出所有脚本中对类使用 Index 的所有使用。
如果你喜欢转义反斜杠,请随意输入它们以匹配 PHP 类路径命名规则
class-use type=declare-class use=ITRocks\\Class_Use\\Index data
搜索关键字
你可以使用一个或多个搜索标准,由以下关键字标识
class
:仅在类源代码中搜索类使用use
:搜索此类使用的类使用type
:搜索此类类型的类使用(类型列表如下)
选项
这些选项可以添加到你的命令行
associative
:结果记录键将是文本而不是任意数字计数器。benchmark
:显示搜索速度和内存消耗的基准测量。data
:以紧凑的 json 格式显示找到的类使用。total
:显示结果总数,例如 "2 results"。pretty
:以漂亮的 json 格式显示找到的类使用。
如果没有设置 associative
/data
/pretty
/total
选项,则默认应用 total
选项。
关联结果键是
class
:使用此使用的类上下文名称type
:使用类型(类型列表如下)use
:使用的类名file
:使用所在的文件名line
:行号token
:用于源代码中具有类名的标记的索引
编程API使用
安装
要将此添加到您的项目中
composer require itrocks/class-use
更新缓存
当您的项目需要更新缓存时,请按照以下步骤进行更新
use ITRocks\Class_Use\Index; $index = new Index(Index::VENDOR); $index->scanDirectory(); $index->classify(); $index->save();
选项标志
Index::VENDOR
:更新有关vendor
目录中php文件的类使用缓存。如果不设置,则仅扫描您的项目文件,这将更快,并且如果您不需要第三方PHP脚本类使用信息,则足够。Index::RESET
:完全重新计算您的类使用缓存。如果不设置,则仅扫描自上次更新以来修改的文件以进行更新。Index::PRETTY
:类使用缓存json文件将是可读的,包括空格和换行符;然而,缓存文件会更大。
Index
的构造函数有一个第二个参数$home
,用于强制指定扫描类和保存类使用缓存的目录。如果不设置,则将从当前工作目录中找到的项目文件进行扫描。
搜索出现次数
use ITRocks\Class_Use\Index; echo "These are where the Index class is used:\n"; $index = new Index(); foreach ($index->search([T_USE => Index::class]) as $reference) { [$class, $type, $use, $file, $line, $token] = $reference; echo "#$key. $type into $file"; if ($class) echo " class $class"; echo " token $token line $line"; echo "\n"; }
此示例将输出项目中所有脚本中对类使用Index
的所有引用。
您可以在examples
目录中运行脚本,以查看多个示例的实际运行情况。例如:
php examples/complete.php
tests/scanner.references.proviver
和Scanner_Test.php
中的单元测试包含大量其他示例及其预期结果。
搜索关键字
你可以使用一个或多个搜索标准,由以下关键字标识
- T_CLASS:在类源代码中搜索类使用
- T_TYPE:搜索此类型的类使用(以下列出类型)
- T_USE:在所有地方搜索此类使用
类使用类型
如果是数值,则每个找到的类使用引用都将与以下类使用类型标识符之一相匹配
- T_ARGUMENT:类用作函数参数类型
- T_ATTRIBUTE:类用作
#[...]
语句中的属性 - T_CLASS:在源代码中显式使用类的名称,即
Class_Name::class
- T_DECLARE_CLASS:类声明
- T_DECLARE_INTERFACE:接口声明
- T_DECLARE_TRAIT:特性声明
- T_EXTENDS:类出现在另一个类声明中的
extends
语句中 - T_IMPLEMENTS:类出现在另一个类声明中的
implements
语句中 - T_INSTANCEOF:类出现在
instanceof
语句之后 - T_INSTEADOF:类出现在
insteadof
语句之后 - T_NEW:类用于实例化对象
- T_RETURN:类用于函数返回类型
- T_STATIC:类用于静态调用,例如
Class_Name::static
或Class_Name::CONSTANT
- T_USE:类出现在类
use
语句中 - T_VARIABLE:类用于类属性类型定义
从命令行调用:类型名称几乎与类型列表常量名称相同:在命令行中传递T_DECLARE_CLASS
而不是传递declare-class
或declare_class
。所有这些变体都将正常工作,如果您更喜欢,还可以传递与常量名称匹配的整数值。
如果是字符串,则使用属性名称作为类型:每个属性中的类使用都将使用属性名称作为类型进行引用。只有当::class
作为参数传递,或者作为数组参数中的值时,才会考虑。