我有一个PHPUser
对象,它可以通过扩展前一个对象而成为不同的对象,这基本上是数据库的抽象。这是一个可视化:
┌─ Parent
┌─ Client ───┤
│ └─ Student
User ┤
│ ┌─ Teacher
└─ Employee ─┤
└─ Staff
我的Users
表包含基本的用户信息,Client
表包含User.user_id
和一些所有客户端都会有的额外信息,并且它向下级联。
无论如何,我正在努力想出创建User
(或Teacher
)对象的最佳方法。我想知道哪一个最好,或者如果没有一个是最好的。以下是我正在考虑的:
1.每个对象都创建自己
我的Teacher->create()
方法将调用级联到根User对象的parent::create()
。这会起作用,只是我需要前面的每个ID。要创建Teacher
,我需要Client.client_id
,要创建Client
,我需要User.user_id
。
2.模型创建对象
也许我的Users
模型使用比较get_class($user)
函数的开关来创建对象?类似于:
$userType = get_class($user);
switch($userType){
case 'Student':
// creates user row, client row, and student row
createStudent($user); break;
case 'Parent':
// creates user row, client row, and parent row
createParent($user); break;
case 'Client':
// creates user row and client row
createClient($user); break;
case 'User':
// creates user row
createUser($user); break;
// few more times for the employee branch
}
这可能可行,但我很想将操作级联,但我似乎无法理解它的工作方式,因为我需要首先创建User
对象并获得User.user_id
,然后才能创建Client
等
我可以多次使用同一个case
的switch
语句吗?像这样:
createUser($user); // create user 1st (ty Svetlio)
switch($userType){
case 'Student':
case 'Parent':
case 'Client':
createClient($user); // create client 2nd
case 'Student':
createStudent($user); // create student 3rd
break;
case 'Parent':
createParent($user); // or create parent 3rd
break;
}
除了,在第一种情况下,'Parent'
不会调用createClient()
和createStudent()
吗?我甚至可以像在这里一样输入多个'Student'
病例吗?
有没有一个标准的方法来做这件事,而我却没有?
非常感谢您的阅读!
我决定让Model创建每个用户。