gpt4 book ai didi

php - is_null 函数在我的 if 语句中无法正常工作

转载 作者:可可西里 更新时间:2023-11-01 12:57:59 25 4
gpt4 key购买 nike

我有一个 if 语句来检测用户是否登录并属于某个部门。这真的很简单。

有一个 Permissions.php 类,如果登录或返回 NULL,则返回 User 对象。

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?

最佳答案

因为 != 不检查类型(null 是一种类型)并且 get_user() 返回类似空字符串或 false 的内容(参见 PHP type comparison table )。

检查输出:

var_dump(Permissions::instance()->get_user());

关于php - is_null 函数在我的 if 语句中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15382017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com