kanel/enuma 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

kanel/enuma

Composer 安装命令:

composer require kanel/enuma

包简介

Dynamically Create and Edit php classes, interfaces and traits

README 文档

README

Package that will help you create and Edit php classes, interfaces and traits dynamically

build

Create classes, interfaces and traits

Basic usage

  1. Create a class
$phpClass = new PhpClass('Foo');

$enuma = new Enuma();
$enuma->save($phpClass, 'path/to/a/file);

will create or rewrite the file with :

<?php

class Foo
{

}
  1. Create an interface
$phpInterface = new PhpInterface('Foo');

$enuma = new Enuma();
$enuma->save($phpInterface, 'path/to/a/file);

will create or rewrite the file with :

<?php

interface Foo
{

}
  1. Create a trait
$phpTrait = new PhpTrait('Foo');

$enuma = new Enuma();
$enuma->save($phpTrait, 'path/to/a/file);

will create or rewrite the file with :

<?php

trait Foo
{

}

Advanced usage

Coding style

Default coding style is PSR2. If you need to customize it you can :

  1. Encoding

Default PSR2 encoding is UTF-8, if you want to use yours :

$customCodingStyle = new CustomCodingStyle();
$customCodingStyle->setEncoding('your encoding');
  1. Php Closing Tag

Default behaviour is not having the ?> closing tag If you want to have it :

$customCodingStyle = new CustomCodingStyle();
$customCodingStyle->setUsePhpClosingTag(true);
  1. Indentation

Default behaviour is 4 spaces, If you want to change it (only space characters allowed):

$customCodingStyle = new CustomCodingStyle();
$customCodingStyle->setIndentation("\t");
  1. Class braces

Default behaviour is class opening braces in new line, If you want to have them on same line as the class:

$customCodingStyle = new CustomCodingStyle();
$customCodingStyle->setClassBracesInNewLine(false);

//will generate : 

class A {

}
  1. Method braces

Default behaviour is method's opening braces in new line, If you want to have them on same line as the method:

$customCodingStyle = new CustomCodingStyle();
$customCodingStyle->setMethodBracesInNewLine(false);

//will generate : 

class A 
{
    public function aaa() {
    
    }
}
  1. Unix line feed

Default behaviour is having an extra new line after class braces closing, If you don't want to have it:

$customCodingStyle = new CustomCodingStyle();
$customCodingStyle->setUnixLineFeedEnding(false);
  1. Windows new line

Default behaviour is Unix new line \n Ifw you want to have windows new line \r\n:

$customCodingStyle = new CustomCodingStyle();
$customCodingStyle->useWindowsNewLine(true);
  1. Array annotation

Default behaviour is short annotation [] If you want to use standard annotation array() :

$customCodingStyle = new CustomCodingStyle();
$customCodingStyle->useShortArrayNotation(false);
  1. Auto comments

Default behaviour is adding automatic @param and @return comments for methods If you don't want to have them:

$customCodingStyle = new CustomCodingStyle();
$customCodingStyle->setAutoComments(false);

Class creation

you can define many things when creating a class/interface/trait :

  1. Coding style:
$customCodingStyle = new CustomCodingStyle();
$customCodingStyle->setClassBracesInNewLine(false);

$phpClass = new PhpClass('Foo', $customCodingStyle);

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

class Foo {

}
  1. Namespace

Works for : PhpClass, PhpInterface and PhpTrait

$phpClass = new PhpClass('Foo');
$phpClass->namespace('My\\Name\\Space');

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

namespace My\Name\Space; 

class Foo
{

}
  1. Use classes

Works for : PhpClass, PhpInterface and PhpTrait

$phpClass = new PhpClass('Foo');
$phpClass->use('My\\Package\\Class1');

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

use My\Package\Class1;

class Foo
{

}
  1. Class comment

Works for : PhpClass, PhpInterface and PhpTrait

$phpClass = new PhpClass('Foo');
$phpClass
    ->namespace('My\\Name\\Space')
    ->use('My\\Package\\Class1')
    ->addComment("This is my class\n@package My\\Name\\Space");

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

namespace My\Name\Space;

use My\Package\Class1;

/**
 * This is my class
 * @package My\Name\Space
 */
class Foo
{

}
  1. Make class Abstract

Only Works for PhpClass

$phpClass = new PhpClass('Foo');
$phpClass
    ->namespace('My\\Name\\Space')
    ->abstract(true);

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

namespace My\Name\Space;

abstract class Foo
{

}
  1. Make class Final

Only Works for PhpClass

$phpClass = new PhpClass('Foo');
$phpClass
    ->namespace('My\\Name\\Space')
    ->final(true);

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

namespace My\Name\Space;

final class Foo
{

}

Since a class can either be final or abstract, setting one to true automatically sets the other to false.

  1. Extend a class

Only Works for PhpClass

$phpClass = new PhpClass('Foo');
$phpClass
    ->namespace('My\\Name\\Space')
    ->extends('My\\OtherPackage\\Class2');

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

namespace My\Name\Space;

use My\OtherPackage\Class2;

final class Foo extends Class2
{

}
  1. Implement interfaces

Only Works for PhpClass

$phpClass = new PhpClass('Foo');
$phpClass
    ->namespace('My\\Name\\Space')
    ->implements('My\\OtherPackage\\Interface1')
    ->implements('My\\OtherPackage\\Interface2');

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

namespace My\Name\Space;

use My\OtherPackage\Interface1;
use My\OtherPackage\Interface2;

class Foo implements Interface1, Interface2
{

}
  1. Use a trait

Works for PhpClass and PhpTrait

$phpClass = new PhpClass('Foo');
$phpClass
    ->namespace('My\\Name\\Space')
    ->useTrait('My\\OtherPackage\\Trait1')
    ->useTrait('My\\OtherPackage\\Trait2');

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

namespace My\Name\Space;

use My\OtherPackage\Trait1;
use My\OtherPackage\Trait2;

class Foo
{
    use Trait1;
    use Trait2;
}
  1. add a Constant

Works for PhpClass and PhpInterface

$phpClass = new PhpClass('Foo');
$phpClass
    ->namespace('My\\Name\\Space')
    ->addConst(new Constant('MY_CONST', true));
    ->addConst(new Constant('MY_OTHER_CONST', array(1, 2, 3));


$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

namespace My\Name\Space;

class Foo
{
    const My_CONST = true;
    const MY_OTHER_CONST = [1, 2, 3];
}

10.1. add a Property

Works for PhpClass and PhpTrait

$phpClass = new PhpClass('Foo');
$phpClass
    ->namespace('My\\Name\\Space')
    ->addProperty(new Property('property1'));

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

namespace My\Name\Space;

class Foo
{
    public $property1;
}

10.2. Set a visibility for a property

You can specify a visibility for the property using the Hint class constants:

Kanel\Enuma\Hint\Visibility::PROTECTED;
Kanel\Enuma\Hint\Visibility::PUBLIC;    <-- default
Kanel\Enuma\Hint\Visibility::PRIVATE;
$phpClass = new PhpClass('Foo');
$phpClass
    ->namespace('My\\Name\\Space')
    ->addProperty(new Property('property1', Visibility::PROTECTED));

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

namespace My\Name\Space;

class Foo
{
    protected $property1;
}

10.3. Set a property as static

$property = new Property('property1', Visibility::PROTECTED);
$property->setIsStatic(true);

$phpClass = new PhpClass('Foo');
$phpClass
    ->namespace('My\\Name\\Space')
    ->addProperty($property);

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

namespace My\Name\Space;

class Foo
{
    protected static $property1;
}

10.4. Set a property's default value

$property = new Property('property1', Visibility::PROTECTED);
$property->setValue(null);

$phpClass = new PhpClass('Foo');
$phpClass
    ->namespace('My\\Name\\Space')
    ->addProperty($property);

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

namespace My\Name\Space;

class Foo
{
    protected static $property1 = null;
}
  1. add a Method

Works for : PhpClass, PhpInterface and PhpTrait

$phpClass = new PhpClass('Foo');
$phpClass
    ->namespace('My\\Name\\Space')
    ->addMethod(new Method('bar'));

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

namespace My\Name\Space;

class Foo
{
    /**
     * @return mixed 
     */
    public function bar()
    {
        
    }
}

11.1. add a Method Visibility

For interfaces, visibility is always public

$phpClass = new PhpClass('Foo');
$phpClass
    ->namespace('My\\Name\\Space')
    ->addMethod(new Method('bar', Visibility::PROTECTED));

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

namespace My\Name\Space;

class Foo
{
    /**
     * @return mixed 
     */
    protected function bar()
    {
        
    }
}

11.2. Set Method as static

$method = new Method('bar', Visibility::PROTECTED);
$method->setIsStatic(true);

$phpClass = new PhpClass('Foo');
$phpClass
    ->namespace('My\\Name\\Space')
    ->addMethod($method);

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

namespace My\Name\Space;

class Foo
{
    /**
     * @return mixed 
     */
    protected static function bar()
    {
        
    }
}

11.3. Set Method as abstract (and the class implicitly)

$method = new Method('bar', Visibility::PROTECTED);
$method->setIsAbstract(true);

$phpClass = new PhpClass('Foo');
$phpClass
    ->namespace('My\\Name\\Space')
    ->addMethod($method);

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

namespace My\Name\Space;

abstract class Foo
{
    /**
     * @return mixed 
     */
    abstract protected function bar();
}

11.4. Set Method as final

$method = new Method('bar', Visibility::PROTECTED);
$method->setIsFinal(true);

$phpClass = new PhpClass('Foo');
$phpClass
    ->namespace('My\\Name\\Space')
    ->addMethod($method);

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

namespace My\Name\Space;

class Foo
{
    /**
     * @return mixed 
     */
    final protected function bar()
    {
        
    }
}

Since a method can either be final or abstract, setting one to true automatically sets the other to false.

11.5. add Method comment

$method = new Method('bar', Visibility::PROTECTED);
$method->setComment('This is my function');

$phpClass = new PhpClass('Foo');
$phpClass
    ->namespace('My\\Name\\Space')
    ->addMethod($method);

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

namespace My\Name\Space;

class Foo
{
    /**
     * This is my function
     * @return mixed 
     */
    protected function bar()
    {
        
    }
}

11.6. add Method Return type

$method = new Method('bar', Visibility::PROTECTED);
$method->setReturnType('bool');

$phpClass = new PhpClass('Foo');
$phpClass
    ->namespace('My\\Name\\Space')
    ->addMethod($method);

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

namespace My\Name\Space;

class Foo
{
    /**
     * This is my function
     * @return bool
     */
    protected function bar(): bool
    {
        
    }
}

11.6. add Method parameters

$method = new Method('bar', Visibility::PROTECTED);
$parameter = new Parameter("test");
$parameter->setValue(true);
$parameter->setType('bool');

$method->addParameter($parameter);

$phpClass = new PhpClass('Foo');
$phpClass
    ->namespace('My\\Name\\Space')
    ->addMethod($method);

$enuma = new Enuma();
echo $enuma->stringify($phpClass);

will output:

<?php

namespace My\Name\Space;

class Foo
{
    /**
     * @param bool $test   
     * @return mixed
     */
    protected function bar(bool $test = true)
    {
        
    }
}

Edit classes

Coming soon

统计信息

  • 总下载量: 23
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 1
  • Forks: 2
  • 开发语言: PHP

其他信息

  • 授权协议: Unknown
  • 更新时间: 2018-03-04

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固