【发布时间】:2013-05-20 17:31:08
【问题描述】:
我无法理解使用继承创建类及其子类的最佳实践。
比方说,我想在我的项目中实现 3 类用户
管理员、用户和联系人
联系人 这是由管理员或用户创建的用户(包含全名、电子邮件、电话和其他联系方式),他们无法登录系统。想象一下,他们只是每个用户私人电话簿的成员。
用户 这是可由管理员创建的用户(同样具有全名、电子邮件、电话和其他联系方式)。他们可以创建联系人但不能创建其他用户,并且他们可以登录系统。他们也可以(并且应该)成为管理员电话簿的成员。
管理员 这是一个用户(同样带有全名、电子邮件、电话和其他联系方式)。他们可以创建用户和/或联系人,并且(当然)他们可以登录系统(为简单起见,假设这些用户将通过提交网络表单来创建)
它们的(简化的)属性是:
联系方式:电子邮件、电话、城市、owner_id、date_in
用户:电子邮件、电话、城市、owner_id、密码、date_in
管理员:电子邮件、电话、城市、密码、date_in
数据库表(用户)类似于:
- id:自动增量
- owner_id:创建此用户的用户 ID
- 全名:文本
- 电子邮件:文本
- 电话:短信
- 城市:文字
- user_type:(联系方式 || 用户 || 管理员)
- date_in:他们注册的日期时间
- 密码:(如果适用)
我不确定我应该使用继承...以下方案是否正确?
class Contact{
}
class User extends Contact{
}
class Admin extends User{
}
其他一些问题: 在 Admin 和 User 中应该有一个可以创建新用户的方法(让我们将其命名为 create_user())。 但是他们每个人都应该做不同的检查并允许不同的选项,并将不同类型的东西插入数据库。这样做的最佳做法是什么?为父类写一个泛型并通过子类调用它,然后用额外的数据更新子类中的条目? (例如:管理员还应该将密码存储到数据库中)
更新:也许我不够清楚......
会有很多通用方法,与用户的类型无关,这就是我想要继承的原因。我也想要一个普通的数据库表。
我的主要问题是如何实现需要 de 不同东西的常用方法...例如,这是类“User”的 user_create()
function user_create($email, $telephone){
dbquery("insert into users ....");
return insert_id();
}
我想知道像这样为 Admin 实现相同的方法是否是个好习惯:
function user_create($email, $telephone, $user_type, $password=''){
$new_id = parent::user_create($email, $telephone);
if (user_type == 'User'){
query("UPDATE users SET type='User', password='$password' WHERE id='$new_id'");
}
return $new_id;
}
【问题讨论】:
标签: php class inheritance subclassing