nxu / php-nano-class-parser
这是一个高度意见化、极其简约且非常乐观的包,旨在帮助向生成的PHP类中添加自定义代码。
v1.2
2023-08-29 07:52 UTC
Requires
- php: >=8.2
- ext-tokenizer: *
- illuminate/collections: >=10
- nikic/php-parser: ^4.17
Requires (Dev)
- laravel/pint: ^1.11
- pestphp/pest: ^2.14
- phpstan/phpstan: ^1.10
- phpstan/phpstan-strict-rules: ^1.5
- symfony/var-dumper: ^6.3
- thecodingmachine/phpstan-strict-rules: ^1.0
README
这是一个非常简单的包,可以帮助您解析一些PHP文件的信息。
理念
本包的目的是确定PHP文件中某些语句的存在,以及可选的垂直位置。这在像程序化地向生成的文件添加额外样板代码等情况下非常有用。
提供分析
- 导入(
use <FQN>;
) - 类定义(
class Someting {}
) - 特质使用(
use <Trait>;
) - 类中的第一个函数(
public static function Something {}
)
我的使用场景
我正在维护一个基于Laravel和Filament的CMS。CMS的一部分是生成PHP文件(如Laravel模型和Filament资源)的命令。在生成过程中,我的目标是
- 使用内置的生成器
- 向其中添加一些自定义PHP样板代码
此包帮助我确定在哪里添加自定义命名空间使用、成员属性和成员函数作为原始字符串。
主要功能/限制
- 极其简约
- 此包只提供我所需要的,没有更多。
- 高度意见化
- 此包提供的功能完全符合我的需求。
- 非常乐观
- 这是一种非常优雅地说“我对边缘情况并不关心”的方式。
如何?
安装
composer require nxu/php-nano-class-parser --dev
使用
TLDR
$class = PhpClass::parse( <<<'PHP' <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class LaravelModel extends Model { use HasFactory; } PHP ); $imports = $class->analyze()->imports(); $imports->firstLine; // 5 $imports->lastLine; // 6 $imports->imports; // [ // 'Illuminate\Database\Eloquent\Factories\HasFactory', // 'Illuminate\Database\Eloquent\Model', // ]
可用的分析
$class = \Nxu\PhpNanoClassParser\PhpClass::parse('...PHP source code...'); $class->analyze()->classDefinition(); $class->analyze()->classOutline(); $class->analyze()->firstFunction(); $class->analyze()->traits(); $class->analyze()->imports();
许可证
此包使用MIT许可证。