为您介绍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
方法对于每个子类都是相同的,所以它应该是父类中的公共方法,但验证程序应该是抽象的,以强制子类实现它。
我只是勾画了这一点,在纸上概念...
人们习惯于弱智化的例子,让其他人可以快速获得问题的根源。通常情况下,这是非常好的,但是如果问题是关于最佳面向对象操作的问题,那么知道确切的上下文是什么变得至关重要。类旨在表示*东西*;不知道这些东西是什么,没有什么可以设计一个类。 – erisco 2011-02-23 05:51:10
在法律上,法律试图与公正匹配。在物理学中,法律可以是攻击孤儿的电锯凶手。编程中的法律更像物理上的法律。 – erisco 2011-02-23 06:17:02
真的没有那么多,但我很欣赏您的反馈。更多的数据是'Parent'类是一个通用的游戏类,我们想要设置胜利的一面。小孩'GameA'只有两面,所以有效的赢面将是1,2或0(平局)。 'GameB'支持8名球员,并且可以有平局,个人获胜者或者2人或3人的获胜团队。所以,我想在父级中定义setter,并让子级决定验证。这对我来说似乎合乎逻辑,但我只是将我的小拇指蘸入OOP。 – Drew 2011-02-23 06:46:09