This blog post has been published on 2020-08-07 and may be out of date.
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