【发布时间】:2011-02-23 03:26:20
【问题描述】:
面向您的介绍性 OOP 问题:
情况:我想要一个带有公共设置器和抽象验证器的抽象类,因为每个孩子都会以独特的方式验证该属性。
代码:
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方法对于每个子类都是一样的,它应该是父类中的公共方法,但验证器应该是抽象的,以强制子类实现它。
我只是从概念上在纸上勾勒出来......
【问题讨论】:
-
人们习惯于简化他们的例子,以便其他人可以快速找到问题的根源。通常这很好,但是对于询问最佳 OOP 实践的问题,了解确切的上下文是什么变得至关重要。类旨在表示事物;在不知道这些东西是什么的情况下,没有什么可以设计一个类。
-
在法律上,法律试图与正义相匹配。在物理学中,法律可以是袭击孤儿院的电锯杀人狂。编程中的合法性更像是物理学中的合法性。
-
真的没有那么多,尽管我很感谢您在下面的反馈。再多一点数据就是
Parent类是一个通用的游戏类,我们想要设置获胜方。子GameA只有 2 个边,因此有效的获胜边将是 1、2 或 0(平局)。GameB支持8人,可以有平局,也可以是个人获胜,也可以是2人或3人获胜的团队。所以,我想在父级中定义 setter 并让子级决定验证。这对我来说似乎是合乎逻辑的,但我只是将我的小脚趾浸入 OOP。
标签: php oop parent-child abstract