jerowork/class-dependencies-parser

解析对象(例如类、特质、接口)中使用的所有依赖(全称)

0.5.1 2023-02-23 18:14 UTC

This package is auto-updated.

Last update: 2024-09-19 08:46:11 UTC


README

Build Status Coverage Status Quality Score Software License Packagist Version PHP Version

解析类(例如类、特质、接口、枚举)中使用的所有依赖(全称)。

安装

通过 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