darkdarin/php-entity-renderer

用于生成类、接口、特质和枚举的PHP代码的渲染器助手

v1.1.4 2024-09-14 08:47 UTC

This package is auto-updated.

Last update: 2024-09-14 08:47:26 UTC


README

用于生成类、接口、特质和枚举的PHP代码的渲染器助手

安装

composer require darkdarin/php-entity-renderer

用法

每个渲染器都有一个 render 方法,该方法生成实体的文本表示。

此方法需要一个参数 - DarkDarin\PhpEntityRenderer\EntityAliases。此对象存储了当前实体作用域内使用的所有使用别名(类、枚举、接口、特质)的集合。

此外,相同的渲染器还具有 renderDocBlock 方法,该方法为 DocBlock 生成实体的文本表示。

具有 renderDocBlock 方法的渲染器

  • 所有类型渲染器(《ArrayTypeRenderer》、《BuiltinTypeRenderer》、《ClassTypeRenderer》、《IntersectTypeRenderer》、《NullableTypeRenderer》、《UnionTypeRenderer》)
  • 参数渲染器
  • 属性渲染器

类型渲染器

用于生成正确类型的渲染器。所有类型都有方法

// Return new type renderer with nullable type
$nullableTypeRenderer = $typeRenderer->setNullable();
// Check current type is nullable
$typeRenderer->isNullable();

BuiltinTypeRenderer

use DarkDarin\PhpEntityRenderer\Renderers\Types\BuiltinTypeRenderer;
use DarkDarin\PhpEntityRenderer\EntityAliases;

$renderer = BuiltinTypeRenderer::Float;
echo $renderer->render(new EntityAliases());
echo $renderer->renderDocBlock(new EntityAliases());
float
float

ClassTypeRenderer

use DarkDarin\PhpEntityRenderer\Renderers\Types\ClassTypeRenderer;
use DarkDarin\PhpEntityRenderer\EntityAliases;

$renderer = new ClassTypeRenderer('\\App\\MyClass');
echo $renderer->render(new EntityAliases());
echo $renderer->renderDocBlock(new EntityAliases());
MyClass
MyClass

ArrayTypeRenderer

use DarkDarin\PhpEntityRenderer\Renderers\Types\ArrayTypeRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\Types\BuiltinTypeRenderer;
use DarkDarin\PhpEntityRenderer\EntityAliases;

$renderer = new ArrayTypeRenderer(BuiltinTypeRenderer::String);
echo $renderer->render(new EntityAliases());
echo $renderer->renderDocBlock(new EntityAliases());
array
list<string>

NullableTypeRenderer

use DarkDarin\PhpEntityRenderer\Renderers\Types\NullableTypeRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\Types\BuiltinTypeRenderer;
use DarkDarin\PhpEntityRenderer\EntityAliases;

$renderer = new NullableTypeRenderer(BuiltinTypeRenderer::String);
echo $renderer->render(new EntityAliases());
echo $renderer->renderDocBlock(new EntityAliases());
?string
string|null

IntersectTypeRenderer

use DarkDarin\PhpEntityRenderer\Renderers\Types\IntersectTypeRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\Types\ClassTypeRenderer;
use DarkDarin\PhpEntityRenderer\EntityAliases;

$renderer = new IntersectTypeRenderer(
    new ClassTypeRenderer('\\App\\MyInterfaceOne'), 
    new ClassTypeRenderer('\\App\\MyInterfaceTwo')
 );
echo $renderer->render(new EntityAliases());
echo $renderer->renderDocBlock(new EntityAliases());
MyInterfaceOne&MyInterfaceTwo
MyInterfaceOne&MyInterfaceTwo

UnionTypeRenderer

use DarkDarin\PhpEntityRenderer\Renderers\Types\UnionTypeRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\Types\ClassTypeRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\Types\BuiltinTypeRenderer;
use DarkDarin\PhpEntityRenderer\EntityAliases;

$renderer = new UnionTypeRenderer(
    new ClassTypeRenderer('\\App\\MyClass'), 
    BuiltinTypeRenderer::Int
 );
echo $renderer->render(new EntityAliases());
echo $renderer->renderDocBlock(new EntityAliases());
MyClass|int
MyClass|int

实体渲染器

用于生成实体的渲染器

相同的实体渲染器具有设置不同修饰符的特殊方法。

继承修饰符

public function setInheritanceModifier(InheritanceModifierEnum $inheritanceModifier): self
public function getInheritanceModifier(): ?InheritanceModifierEnum
InheritanceModifierEnum::Abstract
InheritanceModifierEnum::Final

可用于

  • ClassRenderer
  • MethodRenderer

只读修饰符

public function setReadonly(bool $isReadonly = true): self
public function isReadonly(): bool

可用于

  • ClassRenderer
  • 参数渲染器
  • 属性渲染器

可见性修饰符

public function setVisibilityModifier(?VisibilityModifierEnum $visibilityModifier = null): self
public function getVisibilityModifier(): ?VisibilityModifierEnum
VisibilityModifierEnum::Public
VisibilityModifierEnum::Protected
VisibilityModifierEnum::Private

可用于

  • MethodRenderer
  • 参数渲染器
  • 属性渲染器
  • ConstantRenderer

静态修饰符

public function setStatic(bool $isStatic = true): self
public function isStatic(): bool

可用于

  • MethodRenderer

ValueRenderer

use DarkDarin\PhpEntityRenderer\Renderers\ValueRenderer;
use DarkDarin\PhpEntityRenderer\EntityAliases;

$myValue = [
  'some' => 'foo',
  'different' => 'bar',
];
$renderer = new ValueRenderer($myValue);
echo $renderer->render(new EntityAliases());
[
  'some' => 'foo',
  'different' => 'bar',
]

ConstantRenderer

use DarkDarin\PhpEntityRenderer\Renderers\ConstantRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\ValueRenderer;
use DarkDarin\PhpEntityRenderer\EntityAliases;

$renderer = new ConstantRenderer('MY_CONST', new ValueRenderer(2345));
echo $renderer->render(new EntityAliases());
const MY_CONST = 2345;

DocBlockRenderer

use DarkDarin\PhpEntityRenderer\Renderers\DocBlockRenderer;
use DarkDarin\PhpEntityRenderer\EntityAliases;

$renderer = new DocBlockRenderer();
$renderer->addLine('My comment');
$renderer->addLine('@param int $foo My param');
echo $renderer->render(new EntityAliases());
/**
 * My comment
 * @param int $foo My param
 */

AttributeRenderer

use DarkDarin\PhpEntityRenderer\Renderers\AttributeRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\ValueRenderer;
use DarkDarin\PhpEntityRenderer\EntityAliases;

$renderer = new AttributeRenderer('\\App\\MyAttribute', ['foo' => new ValueRenderer('bar')]);
echo $renderer->render(new EntityAliases());
#[MyAttribute(foo: 'bar')]

属性渲染器

use DarkDarin\PhpEntityRenderer\Renderers\PropertyRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\Types\BuiltinTypeRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\ValueRenderer;
use DarkDarin\PhpEntityRenderer\EntityAliases;

$renderer = new PropertyRenderer('myProperty', BuiltinTypeRenderer::Int);
$renderer->setDefault(new ValueRenderer(567));
echo $renderer->render(new EntityAliases());
public int $myProperty = 567;

参数渲染器

use DarkDarin\PhpEntityRenderer\Renderers\ParameterRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\Types\BuiltinTypeRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\ValueRenderer;
use DarkDarin\PhpEntityRenderer\EntityAliases;

$renderer = new ParameterRenderer('myParameter', BuiltinTypeRenderer::Int);
$renderer->setDefault(new ValueRenderer(567));
echo $renderer->render(new EntityAliases());
int $myParameter = 567

MethodRenderer

use DarkDarin\PhpEntityRenderer\Renderers\MethodRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\ParameterRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\Types\BuiltinTypeRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\ValueRenderer;
use DarkDarin\PhpEntityRenderer\EntityAliases;
use DarkDarin\PhpEntityRenderer\Enums\VisibilityModifierEnum;

$parameterRenderer = new ParameterRenderer('myParameter', BuiltinTypeRenderer::Int);
$parameterRenderer->setDefault(new ValueRenderer(567));

$renderer = new MethodRenderer('myMethod');
$renderer->setVisibilityModifier(VisibilityModifierEnum::Public);
$renderer->addParameter($parameterRenderer);
echo $renderer->render(new EntityAliases());
/**
 * @param int $myParameter
 */
public function myMethod(int $myParameter = 567)
{}

ClassRenderer

use DarkDarin\PhpEntityRenderer\Renderers\ClassRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\MethodRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\ParameterRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\Types\BuiltinTypeRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\ValueRenderer;
use DarkDarin\PhpEntityRenderer\EntityAliases;
use DarkDarin\PhpEntityRenderer\Enums\VisibilityModifierEnum;

$parameterRenderer = new ParameterRenderer('myParameter', BuiltinTypeRenderer::Int);
$parameterRenderer->setDefault(new ValueRenderer(567));

$methodRenderer = new MethodRenderer('myMethod');
$methodRenderer->setVisibilityModifier(VisibilityModifierEnum::Public);
$methodRenderer->addParameter($parameterRenderer);

$renderer = new ClassRenderer('\\App\\MyClassName');
$renderer->setReadonly();
$renderer->addMethod($methodRenderer);
echo $renderer->render(new EntityAliases());
<?php

namespace App;

readonly class MyClassName
{
    /**
     * @param int $myParameter
     */
    public function myMethod(int $myParameter = 567)
    {}
}

TraitRenderer

use DarkDarin\PhpEntityRenderer\Renderers\TraitRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\MethodRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\ParameterRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\Types\BuiltinTypeRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\ValueRenderer;
use DarkDarin\PhpEntityRenderer\EntityAliases;
use DarkDarin\PhpEntityRenderer\Enums\VisibilityModifierEnum;

$parameterRenderer = new ParameterRenderer('myParameter', BuiltinTypeRenderer::Int);
$parameterRenderer->setDefault(new ValueRenderer(567));

$methodRenderer = new MethodRenderer('myMethod');
$methodRenderer->setVisibilityModifier(VisibilityModifierEnum::Public);
$methodRenderer->addParameter($parameterRenderer);

$renderer = new TraitRenderer('\\App\\MyTraitName');
$renderer->addMethod($methodRenderer);
echo $renderer->render(new EntityAliases());
<?php

namespace App;

trait MyTraitName
{
    /**
     * @param int $myParameter
     */
    public function myMethod(int $myParameter = 567)
    {}
}

InterfaceRenderer

use DarkDarin\PhpEntityRenderer\Renderers\InterfaceRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\MethodRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\ParameterRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\Types\BuiltinTypeRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\ValueRenderer;
use DarkDarin\PhpEntityRenderer\EntityAliases;
use DarkDarin\PhpEntityRenderer\Enums\VisibilityModifierEnum;

$parameterRenderer = new ParameterRenderer('myParameter', BuiltinTypeRenderer::Int);
$parameterRenderer->setDefault(new ValueRenderer(567));

$methodRenderer = new MethodRenderer('myMethod');
$methodRenderer->setVisibilityModifier(VisibilityModifierEnum::Public);
$methodRenderer->addParameter($parameterRenderer);

$renderer = new InterfaceRenderer('\\App\\MyInterfaceName');
$renderer->addMethod($methodRenderer);
echo $renderer->render(new EntityAliases());
<?php

namespace App;

interface MyInterfaceName
{
    /**
     * @param int $myParameter
     */
    public function myMethod(int $myParameter = 567);
}

EnumCaseRenderer

use DarkDarin\PhpEntityRenderer\Renderers\EnumCaseRenderer;
use DarkDarin\PhpEntityRenderer\EntityAliases;

$renderer = new EnumCaseRenderer('MyCase', new ValueRenderer('case_value'));
echo $renderer->render(new EntityAliases());
case MyCase = 'case_value';

EnumRenderer

use DarkDarin\PhpEntityRenderer\Renderers\EnumRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\EnumCaseRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\MethodRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\ParameterRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\Types\BuiltinTypeRenderer;
use DarkDarin\PhpEntityRenderer\Renderers\ValueRenderer;
use DarkDarin\PhpEntityRenderer\EntityAliases;
use DarkDarin\PhpEntityRenderer\Enums\VisibilityModifierEnum;

$parameterRenderer = new ParameterRenderer('myParameter', BuiltinTypeRenderer::Int);
$parameterRenderer->setDefault(new ValueRenderer(567));

$methodRenderer = new MethodRenderer('myMethod');
$methodRenderer->setVisibilityModifier(VisibilityModifierEnum::Public);
$methodRenderer->addParameter($parameterRenderer);

$enumFooCase = new EnumCaseRenderer('Foo', new ValueRenderer('foo'));
$enumBarCase = new EnumCaseRenderer('Bar', new ValueRenderer('bar'));

$renderer = new EnumRenderer('\\App\\MyEnumName');
$renderer->addMethod($methodRenderer);
$renderer->addCase($enumFooCase);
$renderer->addCase($enumBarCase);
echo $renderer->render(new EntityAliases());
<?php

namespace App;

enum MyEnumName
{
    case Foo = 'foo';
    case Bar = 'bar';
    
    /**
     * @param int $myParameter
     */
    public function myMethod(int $myParameter = 567)
    {}
}