【发布时间】:2011-02-04 00:10:37
【问题描述】:
我想为一个应用程序建立一个类的基础,其中两个是人和学生。一个人可能是也可能不是学生,学生永远是一个人。学生“是”人这一事实导致我尝试继承,但在我有一个返回人员实例的 DAO 并且我想确定该人是否是一个学生,并为它调用学生相关的方法。
class Person {
private $_firstName;
public function isStudent() {
// figure out if this person is a student
return true; // (or false)
}
}
class Student extends Person {
private $_gpa;
public function getGpa() {
// do something to retrieve this student's gpa
return 4.0; // (or whatever it is)
}
}
class SomeDaoThatReturnsPersonInstances {
public function find() {
return new Person();
}
}
$myPerson = SomeDaoThatReturnsPersonInstances::find();
if($myPerson->isStudent()) {
echo 'My person\'s GPA is: ', $myPerson->getGpa();
}
这显然行不通,但是达到这种效果的最佳方法是什么?作文在我看来并不正确,因为一个人没有“有”学生。我不一定要寻找解决方案,而可能只是要搜索的术语或短语。由于我不太确定我要做什么,所以我运气不佳。谢谢!
【问题讨论】:
-
你已经在 Student 中覆盖了
isStudent(),对吧? -
我可以,是的。在 Student 类中, isStudent() 始终为真。如果我有一个基本 Person 类的实例,isStudent() 可能是也可能不是。
标签: php design-patterns inheritance class composition