is_null 函数在我的 if 语句中无法正常工作
Posted
技术标签:
【中文标题】is_null 函数在我的 if 语句中无法正常工作【英文标题】:is_null function not working properly in my if statement 【发布时间】:2013-03-01 04:38:15 【问题描述】:我有一个 if 语句来检测用户是否已登录并属于某个部门。真的很简单。
有一个 Permissions.php 类,如果登录则返回 User 对象或为 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 函数的代码不起作用?
经过进一步测试,感谢您的一些出色的 cmets,事实证明 get_user()
没有返回 NULL,而是 (bool)false
(来自 var_dump)。为什么会出现这种奇怪的行为?我的班级在顶部明确将其设置为NULL,并且函数将变量返回为false?
【问题讨论】:
有趣。这是否可以在 Ignite.io 或 3v4l.org 等小提琴网站上重现? 你试过empty()函数了吗?这是一个全部:php.net/manual/en/function.empty.php 如果您在工作示例if (Permissions::instance()->get_user() !== NULL)
中进行严格比较会发生什么?如果它失败了,那么你的问题在别处,而不是is_null
您是否尝试在 Permissions::instance()->get_user() 上进行变量转储?或者在 Permissions::instance() 上上课?这些应该有点信息。
@Husman ignite.io/code/51405573ec221e4024000000 我似乎无法重现它。我问 you 是否可以重现它的原因是因为这看起来不太可能,而且你很可能在其他地方错过了一些东西。而且通过重现错误,可能有助于找出问题所在。
【参考方案1】:
因为!=
不检查类型(null 是一种类型)并且get_user()
返回类似空字符串或假的内容(参见PHP type comparison table)。
检查输出:
var_dump(Permissions::instance()->get_user());
【讨论】:
你的权利输出是'(bool)false',这很奇怪,因为变量设置为NULL,并且在任何时候都没有设置为false。 “它绝不会被设置为 false” - 你一定忽略了一些事情,即使在 PHP 中变量也不会无故改变。以上是关于is_null 函数在我的 if 语句中无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章