dalia-it/rough

为composer添加宏支持

v0.0.1-alpha1 2013-02-14 16:44 UTC

This package is not auto-updated.

Last update: 2024-09-22 03:02:14 UTC


README

在您的代码中添加注释,运行宏命令,rough将生成代码。

宏不会被从源代码中移除,并且可以很容易地更新。

目前有宏可以

  • 生成获取方法
  • 生成设置方法
  • 在PHP 5.3中模拟特性

宏语法

#@<macroname> <arg1> <arg2> .... <argN>#
#@ä
  • 宏是行注释。
  • 第一行之前必须只有空白字符。

以下将以get宏为例。

###基本语法

protected $name;
#@get public name#
#@#

第一行开始宏-第二行标记宏的结束。所有由宏生成的代码将在这两行之间。

###简写符号

protected $name;
#@get public name@#

###参数 参数由空格分隔

#@get public name string@#

参数的最简单形式是一个单词

在上面的例子中,'get'宏将以两个参数'name'和'string'调用。

如果参数包含空格,则用双引号包围它以将其标记为文字

@get "public final" name string@#

在上面的例子中,'get'宏将以两个参数'public final'和'string'调用。

一些宏支持将数组作为参数传递

protected
    $name,
    $email;
    
#@get public [name email] string@#

在上面的例子中,'get'宏将以两个参数array('name','email')和'string'调用。数组的成员与普通参数以相同的方式进行分隔,因此您可以在数组中放置一个文字。

protected
    $name,
    $email;
    
#@get public [name email "invalid property name"] string@#

嵌套数组不支持

运行宏

运行宏需要两个步骤

  • 向您的composer.json中添加构建设置
  • 运行rough命令行工具

###构建文件

在运行rough工具之前,您必须向您的composer.json添加一些信息。

"extra":{
        "dalia-it":{
            "rough":{
                "build":{
                    "source": "src/",
                    "output": "src/"
                }
            }
        }
    }
}

source选项告诉rough在哪里查找文件。

output选项告诉rough在哪里写入结果。

一旦您设置好一切,运行rough命令行工具

php vendor/bin/rough macros

Rough将在当前工作目录中查找composer.json。如果您想使用不同的文件,您可以将其作为参数传递。

php vendor/bin/rough macros vendor/foo/foo/build.json

默认宏

导入和特性

特性是PHP 5.4的一个伟大功能。在PHP 5.3中,您可以使用rough来模拟特性的一些(但不是全部)功能。

导入宏简单地复制一个类的主体到另一个类。

与手动复制粘贴相比的优势

  • 如果更改代码,导入宏将更新代码。
  • 如果您构建的项目在PHP >=5.4.0,宏将创建正常的特性

由于此解决方案不支持继承或命名空间,您应该只导入设计为以这种方式使用的类(伪特性)。

  • 伪特性是final。
  • 伪特性必须始终使用完全限定的类名。

Rough将使用composer自动加载器来查找类定义。如果您在项目中有多余的代码,您可以使用which命令来找出将使用哪个文件

php vemdor/bin rough ehich my\\duplicate\\ClassName

定义伪特性

namespace vendor\product;
#@trait Unique@#
{
    protected $uniqueId;
    
    public function getUniqueId(){...}
    public function setUniqueId(\vendor\product\UniqueId $value){...}
}

使用伪特性

namespace vendor\product;
class User:
{
    #@import vendor\product\Unique@#
}

###结果

####PHP < 5.4.0

特性

namespace vendor\product;
#@trait#
final class Unique
#@#
{
    protected $uniqueId;
    
    public function getUniqueId(){...}
    public function setUniqueId(\vendor\product\UniqueId $value){...}
}

使用该特性的类

namespace vendor\product;
class User:
{
    #@import vendor\product\Unique@#
    protected $uniqueId;
    public function getUniqueId(){...}
    public function setUniqueId(\vendor\product\UniqueId $value){...}
    #@#
}

####PHP >= 5.4.0

特性

namespace vendor\product;
#@trait#
trait Unique
#@#
{
    protected $uniqueId;
    
    public function getUniqueId(){...}
    public function setUniqueId(\vendor\product\UniqueId $value){...}
}

使用该特性的类

namespace vendor\product;
class User:
{
    #@import vendor\product\Unique@#
    use \vendor\product\Unique;
    #@#
}