2011-07-01 47 views
2

我创建了有关于用户的信息的用户类中检查类的实例。另外,我已经用另一个名为LoggedInUser的类扩展了这个类。另一个类

与loggedInUser的一点是要能够轻松地告诉我们,如果用户进行身份验证并记录在由是loggedInUser对象是否存在这样的简单检查:

class User { 
//properties 
} 

class LoggedInUser extends User { 
//some additional token stuff 
} 

$isLoggedIn = new LoggedInUser(); 

class Router { 
public function gotoRoute() { 
    if($isLoggedIn) { 
    // perform the action 
    } 
} 
} 

至于我可以告诉大家, $ isLoggedIn不能被类访问,那么我应该将它传递给构造函数吗?还是有更好的方法来做到这一切?

+0

顺便说一下,你分配一个对象$ isLoggedIn,所以这不是要始终评估为真? – Abhay

回答

2

在我看来,你有两个选择。您可以将LoggedInUser传入Router::__construct()。或者你可以在Router::__construct()

1日选项创建LoggedInUser

$LoggedInUser = new LoggedInUser(); 
$Router = new Router($LoggedInUser); 

第二个选项

$Router = new Router(); 

// in router class file 
__construct() { 
    $this->YourProperty = new LoggedInUser(); 
} 

我喜欢的第一个选项。这就是所谓的Dependency Injection

+0

感谢查尔斯,我也是朝选项1.什么倾向有关,我简单地存储的AUTHID在会议并核对了第三种选择?那是不好的做法? – Kristian

+0

我不一定称之为不好的做法。只需要一个类,你就可以用它来做其他事情,比如把它和数据库联系起来,在类中包含一些状态检查方法,以保持你所有的会话方法被封装。如果你需要做那些类型的事情,你可以轻易地把它变成'意大利面条代码',那么只需要一个'$ _SESSION ['authid']''。我尽可能喜欢封装。 – cspray

0

我不能完全肯定,如果这是你所追求的,但关于做$ isLoggedIn私有变量,这样的类可以检查它的存在呢?

私人$ isLoggedIn =新与loggedInUser();

+0

我觉得你到东西..我会回来给你的是 – Kristian

0

首先,变量总是语言环境中的类。你不能在类之外分配一个变量然后调用它。

在这样一个简单的脚本,这就是我会做什么:

class Router { 
    public function gotoRoute() { 
     $isLoggedIn = $isLoggedIn = new LoggedInUser(); 
     if($isLoggedIn instanceof User) { 
     // perform the action 
     } 
    } 
}