Я хотел бы создать основу классов для приложения, два из которых - человек и студент. Человек может быть или не быть студентом, а студент всегда является человеком. Тот факт, что студент «является» человеком, заставил меня попробовать наследование, но я не понимаю, как заставить его работать в случае, когда у меня есть 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();
}
Это, очевидно, не работает, но как лучше всего достичь этого эффекта? Композиция мне не нравится, потому что у человека нет «ученика». Я не ищу решение обязательно, но, возможно, просто термин или фразу для поиска. Поскольку я не совсем уверен, как назвать то, что я пытаюсь сделать, мне не повезло. Спасибо!