darkdarin / php-entity-renderer
用于生成类、接口、特质和枚举的PHP代码的渲染器助手
v1.1.4
2024-09-14 08:47 UTC
Requires
- php: 8.2.*|8.3.*
Requires (Dev)
- laravel/pint: ^1.1
- roave/security-advisories: dev-latest
- vimeo/psalm: ^5.6
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) {} }