我回到过去的时候,我参与了一个围绕两种不同类型用户构建系统的项目。为了简单起见,我们称之为男人和女人。
我们有三个不同的班级。一个User类,包含有关所有用户的公共信息(例如名称,年龄等)。该类还拥有用户类型的属性)。另外两个类男人和女人扩展用户。
数据库包含三个表。一个用于User对象,一个用于Men对象,一个用于Woman对象。
我现在想到的问题是如何最好地创建男人或女人的实例(基于所有用户唯一的用户ID)。由于我们想根据用户类型创建Man或Woman的实例,我们使用首先检查用户类型然后返回一个对象或者Man或Woman的函数来创建它。
也许为了更好地解释它,它看起来有点像这样:
class User {
private $id, $name;
function __construct($userId) {
// Get the information from the database and put it in instance variables
}
}
class Man extends User {
private $somethingManSpecific;
function __construct($userId) {
parent::__construct($userId);
// Fetch info from the Man DB-table...
}
}
class Woman extends User {
private $somethingWomanSpecific;
function __construct($userId) {
parent::__construct($userId);
// Fetch info from the Woman DB-table...
}
}
function getUser($userId) {
$type = find_the_type_of_user($userId);
if ($type == "man") return new Man($userId);
else return new Woman($userId);
}
$fooUser = getUser(99);
这感觉lika是一种奇怪的方式,但我想知道是否有更好的解决方案。
我的部分问题当然是应该如何看待类构造函数。我们使用构造函数从数据库中检索对象的所有属性 - 因此,如果您对此有任何反馈,那将非常感激。
谢谢!