dalia-it / rough
为composer添加宏支持
Requires
- dalia-it/clayball: dev-master
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;
#@#
}