这不是直接的代码问题,而是更多的指导请求。
我是OO PHP的新手,我通常是一名老式开发人员,但我想以现代的方式做事,也许是正确的方式。
我要去3个独立的保护区。我写了一个名为Account的类,但不是创建这个类的3个实例 - 因为这是一个全局类,我不想在单个页面内创建它的新实例 - 我希望有像这样的东西:
$account = new Account();
$account->areaOne->login();
$account->areaTwo->login();
$account->admin->login();
很少有事情要指出......
所以这是我的问题:
对不起我的高傲,但我甚至不知道在Google上搜索什么。
答案 0 :(得分:2)
<强> 1。这是否可能
是!
<强> 2。这个
背后的逻辑是什么每次执行->
时,您都在访问对象的属性或功能。鉴于此,我们推断areaOne
,areaTwo
和admin
也必须是对象。所以你基本上有一个Account
类来创建Login
个具有login()
功能的对象。
第3。哪里是一个好的起点
请阅读有关OOP的更多信息,然后阅读PHP in particular。
因此,您理解了示例背后的概念,示例实现的结构可以如下所示。
(此示例旨在反映OP的示例,不应视为好或坏!)
class Account
{
public $areaOne, $areaTwo, $admin;
public function __construct()
{
$this->areaOne = new Login();
$this->areaTwo= new Login();
$this->admin= new Login();
}
}
class Login
{
//Maybe receive some parameter here...
public function __construct(){}
public function login()
{
//Login logic
}
}
<强> 4。这甚至是做我需要的好方法吗?
嗯......那总是主观的。我需要更多地了解您正在开发的应用程序以确定。这取决于项目的复杂程度,使用的模式等等。但是,我认为你应该改进这个想法。请参阅问题#3以了解如何做到这一点,因为这不是我可以在一个简单的答案中教导如何做的事情:)
要问自己一些问题:
答案 1 :(得分:1)
你需要的只是
$account = new Account();
$account->login();
您的帐户对象应包含必要的字段,以了解它是管理员还是什么。如果您需要更细粒度的访问权限,可能需要查看 ACL (访问控制列表)。
虽然正如评论中建议的那样,您可能希望查看框架。虽然他们通常有很好的学习曲线,但他们也是真正深入 OOP 和 MVC 的好方法。有很多,包括:Symfony2,Zend,Laravel和CodeIgniter。我偏向于Symfony,但这取决于你提出的问题以及你想要完成的事情。
当然,他们做了很多肮脏的工作,但即使在使用框架时也要学习很多。
答案 2 :(得分:1)
在不同的类中使用多个authentication
方法将是代码重复,这意味着调试和维护的噩梦。如果您还选择将用户信息保存在数据库中的单独表中,则只会使问题进一步复杂化。请记住,他们都是用户,只有不同的permissions
。
如果是我,我会encapsulate
将所有authentication
分成一个班级,并将帐户实例传入login
方法。
class Authentication {
public function login(Account $account, $password) {
if ($this->isValidPassword($account, $password)) {
// Login successful
}
}
}
当他们访问resource
时,说Area1
,然后authorized
:
class Authorisation {
public function authorise($account, $resource) {
$role = $this->account->getRole();
if ($this->isAllowedAccess($role, $resource)) {
// Grant access
}
}
}
这样的设计的一大好处是能够相互依赖地修改帐户的内部方法,而不会影响其他类中的任何功能。
如果这里的目的是学习,那么我会考虑编写自己的authentication
和authorization
课程,这将是很好的学习经历。最好的灵感应来自现有的,编写良好的开源框架,例如Zend Framework
。
搜索我所有突出显示的单词,这些是您要实现的目标的关键字。