https://github.com/jerowork/class-dependencies-parser
Parse all dependencies (FQN) used in a class (e.g. class, trait, interface, enum).
https://github.com/jerowork/class-dependencies-parser
dependencies fcqn fqn parser reflection
Last synced: 5 months ago
JSON representation
Parse all dependencies (FQN) used in a class (e.g. class, trait, interface, enum).
- Host: GitHub
- URL: https://github.com/jerowork/class-dependencies-parser
- Owner: jerowork
- License: mit
- Created: 2022-12-21T17:38:28.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-06-19T06:06:14.000Z (almost 3 years ago)
- Last Synced: 2026-01-11T14:11:04.906Z (5 months ago)
- Topics: dependencies, fcqn, fqn, parser, reflection
- Language: PHP
- Homepage:
- Size: 175 KB
- Stars: 2
- Watchers: 1
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# class-dependencies-parser
[](https://github.com/jerowork/class-dependencies-parser/actions)
[](https://scrutinizer-ci.com/g/jerowork/class-dependencies-parser/code-structure)
[](https://scrutinizer-ci.com/g/jerowork/class-dependencies-parser)
[](LICENSE)
[](https://packagist.org/packages/jerowork/class-dependencies-parser)
[](http://www.php.net)
Parse all dependencies (FQN) used in a class (e.g. class, trait, interface, enum).
## Installation
Install via [Composer](https://getcomposer.org/):
```bash
composer require jerowork/class-dependencies-parser
```
## Usage
```php
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 service definition
As a good practice we should always 'program to interfaces, not implementations', you should add this to your DI container.
PSR-11 Container example:
```php
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-file example:
```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
```