first published here: https://suckup.de/2020/08/simple-php-code-parser/
It based on code from “JetBrains/phpstorm-stubs” but instead of Php-Reflection we now use nikic/PHP-Parser, BetterReflection, phpDocumentor and PHPStan/phpdoc-parser internally. So, you can get even more information about the code. For example, psalm- / phpstan-phpdoc annotations or inheritdoc from methods.
Install:
composer require voku/simple-php-code-parser
Link:
More:
- there is also a “.phar” version for e.g. phpdoc checks: voku/Simple-PHP-Code-Parser/releases
- and an API documentations helper for your README file, based on the simple php code parser: voku/Php-Readme-Helper
Example: get value from define in “\foo\bar” namespace
$code = ' <?php namespace foo\bar; define("FOO_BAR", "Lall"); '; $phpCode = PhpCodeParser::getFromString($code); $phpConstants = $phpCode->getConstants(); $phpConstants['\foo\bar\FOO_BAR']->value; // 'Lall'
Example: get information about @property phpdoc from a class
$code = ' <?php /** * @property int[] $foo */ abstract class Foo { } '; $phpCode = PhpCodeParser::getFromString($code); $phpClass = $phpCode->getClass('Foo'); $phpClass->properties['foo']->typeFromPhpDoc); // int
Example: get classes from a string (or from a class-name or from a file or from a directory)
$code = ' <?php namespace voku\tests; class SimpleClass {} $obja = new class() {}; $objb = new class {}; class AnotherClass {} '; $phpCode = \voku\SimplePhpParser\Parsers\PhpCodeParser::getFromString($code); $phpClasses = $phpCode->getClasses(); var_dump($phpClasses['voku\tests\SimpleClass']); // "PHPClass"-object
Top comments (0)