nxu/php-nano-class-parser

这是一个高度意见化、极其简约且非常乐观的包,旨在帮助向生成的PHP类中添加自定义代码。

v1.2 2023-08-29 07:52 UTC

This package is auto-updated.

Last update: 2024-08-29 09:46:22 UTC


README

tests phpstan Packagist Version (custom server)

这是一个非常简单的包,可以帮助您解析一些PHP文件的信息。

Stand With Ukraine

理念

本包的目的是确定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许可证。