jerowork / class-dependencies-parser
解析对象(例如类、特质、接口)中使用的所有依赖(全称)
0.5.1
2023-02-23 18:14 UTC
Requires
- php: ^8.1
- nikic/php-parser: ^4.15
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.13
- maglnet/composer-require-checker: ^4.5
- phpro/grumphp-shim: ^1.14
- phpstan/phpstan: ^1.9
- phpunit/phpunit: ^9.5 || ^10.0
- scrutinizer/ocular: ^1.9
README
解析类(例如类、特质、接口、枚举)中使用的所有依赖(全称)。
安装
通过 Composer 安装
composer require jerowork/class-dependencies-parser
用法
use Jerowork\ClassDependenciesParser\PhpParser\NodeTraverserFactory; use Jerowork\ClassDependenciesParser\PhpParser\PhpParserClassDependenciesParser; use PhpParser\ParserFactory; // Setup parser $parser = new PhpParserClassDependenciesParser( (new ParserFactory())->create(ParserFactory::PREFER_PHP7), new NodeTraverserFactory(), ); // Parse file $classDependencies = $parser->parse('/Path/To/file.php'); // Output dependencies print_r( $classDependencies->getDependencyList(), ); // This will output e.g.: [ 'Some/Namespace/Class', 'Another/Namespace/Trait', // ... ]
DI 服务定义
作为良好的编程实践,我们应该始终“面向接口编程,而不是面向实现”,你应该将其添加到你的 DI 容器中。
PSR-11 容器示例
use Jerowork\ClassDependenciesParser\ClassDependenciesParser; use Jerowork\ClassDependenciesParser\PhpParser\NodeTraverserFactory; use Jerowork\ClassDependenciesParser\PhpParser\PhpParserClassDependenciesParser; use PhpParser\ParserFactory; return [ ClassDependenciesParser::class => static function (ContainerInterface $container): ClassDependenciesParser { return new PhpParserClassDependenciesParser( (new ParserFactory())->create(ParserFactory::PREFER_PHP7), new NodeTraverserFactory(), ); }, ];
Symfony YAML 文件示例
services: _defaults: autowire: true autoconfigure: true Jerowork\ClassDependenciesParser\ClassDependenciesParser: class: Jerowork\ClassDependenciesParser\PhpParser\PhpParserClassDependenciesParser Jerowork\ClassDependenciesParser\PhpParser\NodeTraverserFactory: ~ PhpParser\ParserFactory: ~ PhpParser\Parser: factory: ['@PhpParser\ParserFactory', 'create'] arguments: $kind: 1