我正在使用enterprise architect制作一个uml类图,并用它生成php5代码。使用this,可以为一个属性创建getter和setter,这在代码中是这样的(只显示了相关的行):

private $id;

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

/**
 *
 * @param newVal
 */
public function setId($newVal)
{
    $this->id = $newVal;
}

我想使用magic方法__get($property)__set($property, $value)来代替每个属性的单独方法。有可能吗?如果有,怎么办?
可能看起来是这样的,让人印象深刻的是:
public function __get($property)
{
    switch ($property) {
        case 'id': return $this->id; break;
        default: return null;
    }
}

最佳答案

我同意其他人在这一页上说,这是坏的做法,你应该坚持朴素的老getter和setter超过魔术方法。一旦你需要在访问器/变异器中进行验证或其他计算,你的开关/案例就会爆炸。这是一个混乱的维护和不完全继承友好。具有magic方法的子类在技术上重写父类的magic方法。
但是,您可以使用ea的代码模板编辑器修改代码模板。
引用自Enterprise Architect User Guide on Code Templates
代码模板允许您自定义现有语言的代码生成。例如:
修改生成新文件时创建的文件头
更改生成代码的样式(例如缩进或大括号位置)以匹配所需的编码标准
处理特定的构造型以生成专门的方法体和额外的方法。
进一步:
企业架构师的基本代码模板指定从UML元素到给定编程语言的各个部分的转换。模板是以纯文本形式编写的,其语法与标记语言和脚本语言有一些共同之处。
下面是代码编辑器的示例图片,其中加载了一些模板:
我不熟悉编辑器,也不熟悉它们使用的模板语言,因此我无法为您提供一个工作示例。但是如果你真的想修改模板的话,我想你可以从那里找到答案。

09-11 17:26