Enterprise Architect中的魔术吸气剂和制定者

4 php uml enterprise-architect magic-methods getter-setter

我正在使用Enterprise Architect制作UML类图并用它生成PHP5代码.使用,可以为属性创建getter和setter,在代码中看起来像这样(只显示相关的行):

private $id;

public function getId()
{
    return $this->id;
}

/**
 * 
 * @param newVal
 */
public function setId($newVal)
{
    $this->id = $newVal;
}
Run Code Online (Sandbox Code Playgroud)

我想使用魔术方法__get($property)__set($property, $value)不是每个属性的单独方法.是否可能,如果可能,怎么样?

对于getter来说,它看起来像这样:

public function __get($property)
{
    switch ($property) {
        case 'id': return $this->id; break;
        default: return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

Fur*_*gas 6

不是一个真正的答案,但你应该考虑是否希望这样做.这不会带来任何好处,但会导致IDE代码完成功能出现问题,实际上会使代码维护更加困难.在我看来,magic __get/__ set应仅用于动态属性,否则使用单独的set/get方法或使用公共属性.这个答案几乎总结了它.

如果你还想走这条路,我会建议更简单的方法.


Gor*_*don 5

我同意本页面上的其他人认为这是一种不好的做法,你应该坚持使用普通的老吸气剂和魔术方法.一旦您需要在访问器/更改器中进行验证或其他计算,您的开关/案例就会爆炸.这是一个混乱的维护,而不是完全友好的继承.使用魔术方法的子类在技术上会覆盖父级的魔法.

但是,您可以通过使用EA的代码模板编辑器修改代码模板来实现.

代码模板上的Enterprise Architect用户指南引用:

代码模板使您可以自定义现有语言的代码生成.例如:

  • 修改生成新文件时创建的文件头
  • 更改生成的代码的样式(例如缩进或支撑位置)以匹配所需的编码标准
  • 处理特定的构造型以生成诸如专用方法体和额外方法之类的东西.

并进一步:

Enterprise Architect的基本代码模板指定从UML元素到给定编程语言的各个部分的转换.模板以纯文本形式编写,其语法与标记语言和脚本语言的某些方面共享.

下面是代码编辑器的示例图片,其中加载了一些模板:

Enterprise Architect代码模板编辑器

我不熟悉编辑器或他们使用的模板语言,所以我无法为您提供一个工作示例.但我想如果你真的想要修改模板,你可以从那里弄明白.