我在理解使用继承创建类和子类的最佳实践时遇到问题。
可以说,我想在我的项目中实现 3 类用户
管理员、用户和联系人
联系人这是由管理员或用户创建的用户(具有全名、电子邮件、电话和其他联系方式),他们无法登录系统。想象他们只是每个用户的私人电话簿的成员。
用户这是可由管理员创建的用户(同样具有全名、电子邮件、电话和其他联系方式)。他们可以创建联系人但不能创建其他用户,并且他们可以登录系统。他们也可以(并且应该)成为管理员电话簿的成员。
管理员这是一个用户(同样具有全名、电子邮件、电话和其他联系方式)。他们可以创建用户和/或联系人,并且(当然)他们可以登录系统(为了简单起见,假设这些用户将通过提交 Web 表单来创建)
它们的(简化)属性是:
联系方式:电子邮件、电话、城市、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())。但是他们每个人都应该做不同的检查并允许不同的选项,并将不同类型的东西插入数据库。这样做的最佳做法是什么?为父类写一个泛型并通过子类调用它,然后用额外的数据更新子类的条目?(例如:管理员还应该将密码存储到数据库中)
更新:也许我不够清楚......
会有很多常用方法,与用户的类型无关,这就是我想要继承的原因。我还想要一个通用的数据库表。
我的主要问题是如何实现需要处理不同内容的常用方法......例如,这是“用户”类的 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;
}