DEV Community

Cover image for ❤️ Simple PHP Code Parser
Lars Moelleken
Lars Moelleken

Posted on

❤️ Simple PHP Code Parser

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:

voku/Simple-PHP-Code-Parser

More:


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' 
Enter fullscreen mode Exit fullscreen mode

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 
Enter fullscreen mode Exit fullscreen mode

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 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)