如何验证是否设置了对象变量

时间:2010-02-16 19:15:38

标签: php oop

我有一个User类,当用户登录时会创建

$user = new User($userId);

现在要检查用户是否已登录,我尝试了

if (isset($user)) {   // user is logged in

} else {   // user is not logged in

}

但是,isset()似乎不适用于对象?我也试过is_object()。请指教!希望有一种方法可以优雅地做到这一点,也许

if ($user->isLoggedIn()) {

}

谢谢你的时间!

4 个答案:

答案 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()也适用于对象。事实上,只要符合以下条件,它就可以使用:

  1. 该变量已在当前范围内声明
  2. 变量值不同于NULL