leaditin/code
Composer 安装命令:
composer require leaditin/code
包简介
Provides an API to easy generate PHP code
README 文档
README
Provides an API to generate arbitrary code.
Installation
The preferred method of installation is via Composer. Run the following command to install the latest version of a package and add it to your project's composer.json:
composer require leaditin/code
Usage
1. Create Class
<?php use Leaditin\Code\DocBlock; use Leaditin\Code\Flag; use Leaditin\Code\Generator\Factory; use Leaditin\Code\Import; use Leaditin\Code\Member\Constant; use Leaditin\Code\Member\Method; use Leaditin\Code\Member\Property; use Leaditin\Code\Tag; use Leaditin\Code\Type; use Leaditin\Code\Value; use Leaditin\Code\Visibility; $generator = (new Factory())->classGenerator(); $generator ->setName('MyClass') ->setNamespace('MyDummyNamespace') ->setExtends('MyDummyClass') ->implementInterface('MyDummyInterface') ->useTrait('MyDummyTrait') ->setDocBlock( new DocBlock( 'Short description', 'Long description', [ new Tag('author', 'author@domain') ] ) ) ->addImport(new Import('MyNamespace\\MyDummyTrait')) ->addConstant(new Constant('CONST_A', 2, new Visibility(Visibility::VISIBILITY_PUBLIC))) ->addConstant(new Constant('CONST_B', 3, new Visibility(Visibility::VISIBILITY_PUBLIC))) ->addProperty(new Property('name', new Value('Some User'), new Type(Type::TYPE_STRING), new Flag(Flag::FLAG_PROTECTED))) ->addProperty(new Property('email', new Value('author@domain'), new Type(Type::TYPE_STRING), new Flag(Flag::FLAG_PROTECTED))) ->addMethod(new Method('name', new Flag(Flag::FLAG_PUBLIC), null, 'return $this->name;', null, new Type(Type::TYPE_STRING))) ->addMethod(new Method('email', new Flag(Flag::FLAG_PUBLIC), null, 'return $this->email;', null, new Type(Type::TYPE_STRING))); echo $generator->generate();
Will output:
<?php namespace MyDummyNamespace; use MyNamespace\MyDummyTrait; /** * Short description * * Long description * * @author author@domain */ class MyClass extends MyDummyClass implements MyDummyInterface { use MyDummyTrait; public const CONST_A = 2; public const CONST_B = 3; /** * @var string */ protected $name = 'Some User'; /** * @var string */ protected $email = 'author@domain'; /** * @return string */ public function name(): string { return $this->name; } /** * @return string */ public function email(): string { return $this->email; } }
2. Create Interface
<?php use Leaditin\Code\DocBlock; use Leaditin\Code\Flag; use Leaditin\Code\Generator\Factory; use Leaditin\Code\Member\Constant; use Leaditin\Code\Member\Method; use Leaditin\Code\Type; use Leaditin\Code\Visibility; $generator = (new Factory())->interfaceGenerator(); $generator ->setName('MyInterface') ->setNamespace('MyDummyNamespace') ->setExtends('MyDummyInterface') ->setDocBlock( new DocBlock( 'Short description', 'Long description' ) ) ->addConstant(new Constant('CONST_A', 2, new Visibility(Visibility::VISIBILITY_PUBLIC))) ->addConstant(new Constant('CONST_B', 3, new Visibility(Visibility::VISIBILITY_PUBLIC))) ->addMethod(new Method('name', new Flag(Flag::FLAG_PUBLIC), null, null, null, new Type(Type::TYPE_STRING))) ->addMethod(new Method('email', new Flag(Flag::FLAG_PUBLIC), null, null, null, new Type(Type::TYPE_STRING))); echo $generator->generate();
Will output...
<?php namespace MyDummyNamespace; /** * Short description * * Long description */ interface MyInterface extends MyDummyInterface { public const CONST_A = 2; public const CONST_B = 3; /** * @return string */ public function name(): string; /** * @return string */ public function email(): string; }
3. Create Trait
<?php use Leaditin\Code\DocBlock; use Leaditin\Code\Flag; use Leaditin\Code\Generator\Factory; use Leaditin\Code\Member\Method; use Leaditin\Code\Member\Property; use Leaditin\Code\Type; use Leaditin\Code\Value; $generator = (new Factory())->traitGenerator(); $generator ->setName('MyTrait') ->setDocBlock( new DocBlock( 'Short description', 'Long description' ) ) ->addProperty(new Property('name', new Value('Some User'), new Type(Type::TYPE_STRING), new Flag(Flag::FLAG_PROTECTED))) ->addProperty(new Property('email', new Value('author@domain'), new Type(Type::TYPE_STRING), new Flag(Flag::FLAG_PROTECTED))) ->addMethod(new Method('name', new Flag(Flag::FLAG_PUBLIC), null, 'return $this->name;', null, new Type(Type::TYPE_STRING))) ->addMethod(new Method('email', new Flag(Flag::FLAG_PUBLIC), null, 'return $this->email;', null, new Type(Type::TYPE_STRING))); echo $generator->generate();
Will output...
<?php /** * Short description * * Long description */ trait MyTrait { /** * @var string */ protected $name = 'Some User'; /** * @var string */ protected $email = 'author@domain'; /** * @return string */ public function name(): string { return $this->name; } /** * @return string */ public function email(): string { return $this->email; } }
Credits
License
Released under MIT License - see the License File for details.
统计信息
- 总下载量: 2
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 2
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2020-03-26