每个对象代表数据库中的一行。示例:
管理员表
id, first_name, last_name
1, 'John', 'Doe'
$admin 对象(伪)
class admin extends base {
protected $id;
protected $first_name;
protected $last_name;
public function setter() { }
public function getter() { }
/* ETC */
}
这部分我真的很清楚,我可以设置、获取和保存(这个函数位于基类中)数据。
现在,当我创建一个包含多个与另一个表相关的行的表时,我应该怎么做。示例:
admin_preveleges 表
id, admin_id, privilege, value
1, 1, 'read_reports', 1
2, 1, 'delete_news', 1
3, 1, 'delete_users', 1
物体会是什么样子?一个对象是否包含我们 John Doe 管理员的所有 3 行?或者我会为 John Doe 创建 3 个对象吗?
如何将它们连接到管理对象?
如果我创建 3 个单独的对象并将它们连接到 $admin 对象,我如何检查该管理员是否有删除用户的权限?我是否必须遍历所有对象并检查其中一个是否为“delete_users”然后中断循环?
或者我应该忘记将权限表作为一个对象,而只是在 $admin 对象中为它创建一个处理程序吗?
最佳答案
创建一个新类AdminPrivilege
:
class AdminPrivilege extends base {
protected $id;
protected $admin_id;
protected $privlege;
protected $allowed;
public function setter() { }
public function getter() { }
/* ETC */
}
然后在您的 Controller 类中创建一个名为 loadAdminPrivilegesByAdminID($adminID)
的方法。在此方法中,为管理员加载权限,创建 AdminPrivilege
对象并将它们作为数组返回,并将该数组附加到您的 admin
对象。
class admin extends base {
protected $id;
protected $first_name;
protected $last_name;
protected $privileges; // NEW to attach the privileges of this admin to himself
public function setter() { }
public function getter() { }
public function setPrivileges(array $privileges) {
$this->privileges = $privileges;
}
public function getPrivileges() {
return $this->privileges;
}
/* ETC */
}
检查管理员是否具有特定权限很容易。在您的 Controller 类中创建一个新方法 checkPrivilege($adminObj, $privilegeName)
:
public function checkPrivilege($adminObj, $privilegeName) {
foreach($adminObj->getPrivileges() as $prv) {
if($prv->privilege != $privilegeName)
continue;
return true;
}
return false;
}
关于php - 由数据库行组成的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19754021/