抽象类和验证方法

时间:2011-02-23 03:26:21

标签: php oop parent-child abstract

为您介绍OOP问题:

情况:我想要一个带有公共setter和抽象验证器的抽象类,因为每个子节点都会以独特的方式验证该属性。

代码:

abstract class Parent {
    public function setName($name) {
        if (validateName($name)) {
            $this->_name = $name;
        } else {
            // error msg
        }
    }

    abstract public function validateName($name);
}

class Child extends Parent {
    public function validateName($name) {
        // ensure name gits this child's requirements
    }
}

问题:这是一种“合法”的设计方法吗?我想,因为setName方法对于每个子类都是相同的,所以它应该是父类中的公共方法,但验证器应该是抽象的,以强制子类实现它。

我只是概念性地将它写在纸上......

1 个答案:

答案 0 :(得分:2)

是的,这是一种有效的方法,尽管你的语法不完美:

        if (validateName($name)) {

应该是这样的:

        if ($this->validateName($name)) {

但如果这是架构的范围,为什么不定义验证和设置它的抽象setName()呢?像这样:

interface Parent {
    public function setName($name);
}

class Child implements Parent {
    public function setName($name) {
        if (/* $name is valid */) {
            $this->_name = $name;
        } else {
            // error message
        }
    }
}

当然我在这里使用了一个界面,因为在Parent中没有代码。

但请注意,这取决于您的计划结构。我必须至少看到程序架构的图表,无论如何都要说明。