envorradev / file-class-resolver
0.1
2022-09-10 14:31 UTC
Requires
- php: ^8.1
- nikic/php-parser: ^4.15
Requires (Dev)
- phpstan/phpstan: ^1.8
- phpunit/phpunit: ^9.5
- ramsey/composer-repl: ^1.4
This package is auto-updated.
Last update: 2024-09-14 03:58:42 UTC
README
一个简单的工具,用于根据文件路径解析完全限定的类名和类的实例。
安装
$ composer require envorradev/file-class-resolver
用法
以下示例将使用以下示例类
namespace SomeNamespace\SomeFolder; class SomeClass { public function __construct( public string $aRequiredString, public int $anOptionalInt = 5, ) {} }
$filename = __DIR__.'/SomeFolder/SomeClass.php';
它们还假设您已通过
use Envorra\FileClassResolver\ClassResolver;
解析完全限定的类名
ClassResolver::resolve($filename);
返回
'SomeNamespace\SomeFolder\SomeClass'
创建实例
无参数要求的类
ClassResolver::make($someOtherClassPath);
有参数要求的类
将参数作为数组作为 make 方法的参数传递
ClassResolver::make($filename, ['string value', 10]);
只需传递所需的参数
ClassResolver::make($filename, ['string value']);
您可以按名称传递参数
ClassResolver::make($filename, ['aRequiredString' => 'string value', 'anOptionalInt' => 7]);
当使用命名参数时,顺序无关紧要
ClassResolver::make($filename, ['anOptionalInt' => 7, 'aRequiredString' => 'string value']);
获取解析器实例
ClassResolver::resolver($filename);
返回一个 ClassResolver 实例。
可用的 ClassResolver 方法
在以下示例中
$resolver = ClassResolver::resolve($filename);
getClass(): ?string
获取完全限定的类名。
等同于 ClassResolver::resolve($filename) 和 $resolver->getFullyQualifiedClassName()
$resolver->getClass();
返回
'SomeNamespace\SomeFolder\SomeClass'
getClassInstance(array $parameters = []): ?object
获取类的实例。
等同于 ClassResolver::make($filename, $parameters)
$resolver->getClassInstance(['string']);
返回 SomeClass 的实例
getClassName(): ?string
仅获取类名。
$resolver->getClassName();
返回
'SomeClass'
getClassNode(): \PhpParser\Node\Stmt\Class_
获取 \PhpParser\Node\Stmt\Class_ 节点。
参见: nikic/php-parser 和 Class_
$resolver->getClassNode();
返回类似以下的内容
PhpParser\Node\Stmt\Class_ {#8563 +name: PhpParser\Node\Identifier {#8550 +name: "SomeClass", }, +stmts: [ PhpParser\Node\Stmt\ClassMethod {#8562 +flags: 1, +byRef: false, +name: PhpParser\Node\Identifier {#8551 +name: "__construct", }, +params: [ PhpParser\Node\Param {#8554 +type: PhpParser\Node\Identifier {#8553 +name: "string", }, +byRef: false, +variadic: false, +var: PhpParser\Node\Expr\Variable {#8552 +name: "aRequiredString", }, +default: null, +flags: 1, +attrGroups: [], }, PhpParser\Node\Param {#8557 +type: PhpParser\Node\Identifier {#8556 +name: "int", }, +byRef: false, +variadic: false, +var: PhpParser\Node\Expr\Variable {#8555 +name: "anOptionalInt", }, +default: null, +flags: 1, +attrGroups: [], }, ], +returnType: null, +stmts: [], +attrGroups: [], }, ], +attrGroups: [], +namespacedName: null, +flags: 0, +extends: null, +implements: [], }
getFullyQualifiedClassName(): ?string
获取完全限定的类名。
等同于 ClassResolver::resolve($filename) 和 $resolver->getClass()
$resolver->getFullyQualifiedClassName();
返回
'SomeNamespace\SomeFolder\SomeClass'
getNamespace(): ?string
仅获取类的命名空间。
$resolver->getNamespace();
返回
'SomeNamespace\SomeFolder'
getNamespaceNode(): \PhpParser\Node\Stmt\Namespace_
获取 \PhpParser\Node\Stmt\Namespace_ 节点。
参见: nikic/php-parser 和 Namespace_
$resolver->getNamespaceNode();
返回类似以下的内容
PhpParser\Node\Stmt\Namespace_ {#8549 +name: PhpParser\Node\Name {#8548 +parts: [ "SomeNamespace", "SomeFolder", ], }, +stmts: [ PhpParser\Node\Stmt\Class_ {#8563 +name: PhpParser\Node\Identifier {#8550 +name: "SomeClass", }, +stmts: [ PhpParser\Node\Stmt\ClassMethod {#8562 +flags: 1, +byRef: false, +name: PhpParser\Node\Identifier {#8551 +name: "__construct", }, +params: [ PhpParser\Node\Param {#8554 +type: PhpParser\Node\Identifier {#8553 +name: "string", }, +byRef: false, +variadic: false, +var: PhpParser\Node\Expr\Variable {#8552 +name: "aRequiredString", }, +default: null, +flags: 1, +attrGroups: [], }, PhpParser\Node\Param {#8557 +type: PhpParser\Node\Identifier {#8556 +name: "int", }, +byRef: false, +variadic: false, +var: PhpParser\Node\Expr\Variable {#8555 +name: "anOptionalInt", }, +default: null, +flags: 1, +attrGroups: [], }, ], +returnType: null, +stmts: [], +attrGroups: [], }, ], +attrGroups: [], +namespacedName: null, +flags: 0, +extends: null, +implements: [], }, ], }