我有一个User
类,当用户登录时会创建
$user = new User($userId);
现在要检查用户是否已登录,我尝试了
if (isset($user)) { // user is logged in
} else { // user is not logged in
}
但是,isset()
似乎不适用于对象?我也试过is_object()
。请指教!希望有一种方法可以优雅地做到这一点,也许
if ($user->isLoggedIn()) {
}
谢谢你的时间!
答案 0 :(得分:10)
isset()
应该工作,反对或不反对。您也可以使用
if ((isset($user)) and ($user instanceof User))
检查是否设置了和它是否是类User
的对象。
答案 1 :(得分:4)
问题在于
new User($userid);
将总是给你一个User
对象,即使它的构造函数(可能在数据库中查找$userid
)可能会得出结论该对象不存在。您可以在无效$userid
的构造函数中抛出异常,并使用try
/ catch
构造而不是isset()
测试,或设置User->valid
属性在存在的用户的构造函数中,并在测试中检查它。
另请参阅此问题以获取更多想法:PHP constructor to return a NULL
答案 2 :(得分:2)
如果您编辑User类,则可以使用$ user-> isLoggedIn()
class User {
private $logged_in = false;
...
public function login($uid) {
... login code
$this->logged_in = true;
}
public function isLoggedIn() {
return $this->logged_in;
}
...
}
答案 3 :(得分:1)
isset()也适用于对象。事实上,只要符合以下条件,它就可以使用: