voku/simple-php-code-parser

从您的PHP代码中获取简单数据结构。

0.20.1 2023-08-13 00:28 UTC

README

Build Status Codacy Badge Latest Stable Version Total Downloads License Donate to this project using Paypal Donate to this project using Patreon

❤ Simple PHP Code Parser

您可以简单地扫描字符串、文件或整个目录,并从您的PHP代码中看到简单数据结构。

  • 类 (PHPClass)
  • 属性 (PHPProperties)
  • 常量 (PHPConst)
  • 方法 (PHPMethod)
  • 接口 (PHPInterface)
  • 特质 (PHPTrait)
  • 函数 (PHPFunction)
  • 参数 (PHPParameter)

此代码是从 JetBrains/phpstorm-stubs 分支的,但不能直接使用 "phpstorm-stubs" 中的类,因为它们在测试命名空间中,并且自动加载器是 "autoload-dev",因此这里是一个扩展版本。

我们将使用

通过 "composer require" 安装

composer require voku/simple-php-code-parser

快速开始

解析字符串

$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

解析一个类

$phpCode = \voku\SimplePhpParser\Parsers\PhpCodeParser::getFromClassName(Dummy::class);
$phpClasses = $phpCode->getClasses();

var_dump($phpClasses[Dummy::class]); // "PHPClass"-object

var_dump($phpClasses[Dummy::class]->methods); // "PHPMethod[]"-objects

var_dump($phpClasses[Dummy::class]->methods['withoutPhpDocParam']); // "PHPMethod"-object

var_dump($phpClasses[Dummy::class]->methods['withoutPhpDocParam']->parameters); // "PHPParameter[]"-objects

var_dump($phpClasses[Dummy::class]->methods['withoutPhpDocParam']->parameters['useRandInt']); // "PHPParameter"-object

var_dump($phpClasses[Dummy::class]->methods['withoutPhpDocParam']->parameters['useRandInt']->type); // "bool"

解析一个文件

$phpCode = \voku\SimplePhpParser\Parsers\PhpCodeParser::getPhpFiles(__DIR__ . '/Dummy.php');
$phpClasses = $phpCode->getClasses();

var_dump($phpClasses[Dummy::class]); // "PHPClass"-object

var_dump($phpClasses[Dummy::class]->methods); // "PHPMethod[]"-objects

var_dump($phpClasses[Dummy::class]->methods['withoutPhpDocParam']); // "PHPMethod"-object

var_dump($phpClasses[Dummy::class]->methods['withoutPhpDocParam']->parameters); // "PHPParameter[]"-objects

var_dump($phpClasses[Dummy::class]->methods['withoutPhpDocParam']->parameters['useRandInt']); // "PHPParameter"-object

var_dump($phpClasses[Dummy::class]->methods['withoutPhpDocParam']->parameters['useRandInt']->type); // "bool"

解析多个文件

$phpCode = \voku\SimplePhpParser\Parsers\PhpCodeParser::getPhpFiles(__DIR__ . '/src');
$phpClasses = $phpCode->getClasses();

var_dump($phpClasses[Dummy::class]); // "PHPClass"-object

支持

有关支持和捐赠,请访问 Github | 问题 | PayPal | Patreon

有关状态更新和发布公告,请访问 发布 | Twitter | Patreon

有关专业支持,请联系

感谢

  • 感谢 GitHub (Microsoft) 为代码托管和良好的基础设施(包括问题管理等)提供支持。
  • 感谢 IntelliJ,因为他们制作了最好的PHP IDE,并给了我PhpStorm的开源许可证!
  • 感谢 Travis CI,它是最好的、最简单的持续集成工具!
  • 感谢 StyleCI 提供简单但功能强大的代码风格检查。
  • 感谢 PHPStanPsalm 提供真正出色的静态分析工具,并在代码中发现错误!