我有一个 if 语句来检测用户是否已登录并属于某个部门。这真的很简单。
有一个 Permissions.php 类,如果登录或 NULL,则返回用户对象。
protected $user = NULL;
...
public static function instance() {
if(!self::$instance) {
self::$instance = new Permissions();
}
return self::$instance;
}
...
public function get_user() {
return $this->user;
}
然后是 user.php 类,它具有返回它们所在分区的函数:
public function is_manager() {
return $this->is_manager;
}
所以我应该能够做到以下几点:
if(Permissions::instance()->get_user()->is_manager())
但当然,这可能会引发有关 NULL 对象的警告,所以我认为您可以执行以下操作:
if( ( ! is_null( Permissions::instance()->get_user() ) ) &&
( Permissions::instance()->get_user()->is_manager() ))
哪个应该检查 null ,如果没有,它应该评估 if 语句的另一半,但是 PHP 出于某种原因评估了所有它并且仍然抱怨 NULL 对象(当用户未登录时)。
所以我把 if 语句分解成一个嵌套的 if 语句,PHP 仍然抱怨 null 对象,这让我相信 is_null 方法没有按预期工作。
这最终奏效了:
if (Permissions::instance()->get_user() != NULL) {
if(Permissions::instance()->get_user()->is_manager()){
...
}
}
我的问题是,为什么我的带有 is_null 函数的代码不起作用?
经过进一步测试,多亏了您的一些精彩评论,事实证明这get_user()
不是返回 NULL,而是(bool)false
(来自 var_dump)。为什么会出现这种奇怪的行为?我的类在顶部清楚地将其设置为 NULL,并且函数将变量返回为 false?