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

11

我有一个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个回答

12

isset()函数应该可以工作,无论是对象还是其他类型的变量。你也可以使用

if ((isset($user)) and ($user instanceof User))

检查它是否已设置并且是否是类User的对象。


4
问题在于:
new User($userid);

即使它的构造函数在数据库中查找$userid后发现对象不存在,总是会给你一个User对象。您可以在无效的$userid构造函数中抛出异常并使用try/catch结构,而不是使用isset()测试,或者在存在的用户的构造函数中设置一个User->valid属性,并在测试中检查该属性。

有关更多想法,请参见此问题:PHP构造函数返回NULL


2
如果您编辑用户类,您可以使用 $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;
}

...
}

这是正确的答案。如果您有一个用户并想要检查他是否已登录,使用 isset($user) 来确定用户是否已登录是一个非常糟糕的想法。 - MarthyM

1

isset()也适用于对象。实际上,只要满足以下条件,它就可以适用于任何东西:

  1. 变量已在当前作用域中声明
  2. 变量值不同于NULL

如何检查变量是否为NULL? - Intacto
@Intacto 你的意思是 $var === NULL 吗? - AlexV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接