在CodeIgniter3.x中使用empty()和isset()检查会话变量


Checking session variables with empty() and isset() in CodeIgniter 3.x

使用CodeIgniter 3.0.3,文档指出可以通过几种不同的方式检索会话数据,包括$_SESSION['item']$this->session->item。这是真的。无论我如何设置会话变量,我都可以通过两种方式回显该值。

现在,填充该会话变量后,我可以检查是否存在如下空条件:if(empty($_SESSION['item'])),它的计算结果为bool(false),正如我所期望的那样。然而,如果我以这种方式检查相同的会话变量:if(empty($this->session->item)),它的计算结果为bool(true),这不是我所期望的(因为我可以在下一行中回显它的值)。为什么这两种不同的空状态检查方法的评估不同?

这是由于empty()的工作方式。比较此报价:

empty($registry->notEmpty)的结果有点出乎意料,因为该值显然是已设置且非空的。这是因为empty()函数在这些情况下使用了__isset()魔术函数。尽管上面的文档中已经提到了这一点,但我认为值得更详细地提及,因为这种行为并不简单。为了获得所需的(expexted?)结果,您需要向类中添加__isset()魔术函数:

(取自php.net:http://php.net/manual/en/function.empty.php,来自用户Janci的评论)