使用CodeIgniter 3.0.3,文档指出可以通过几种不同的方式检索会话数据,包括$_SESSION['item']
和$this->session->item
。这是真的。无论我如何设置会话变量,我都看到我可以双向回应这个值。
现在,填充了该会话变量后,我可以检查这样的空状态:if(empty($_SESSION['item']))
,它的评估结果为bool(false)
,就像我期望的那样。但是,如果我以这种方式检查相同的会话变量:if(empty($this->session->item))
它的计算结果为bool(true)
,这不是我所期望的(因为我可以在下一行回显它的值)。为什么这两种不同的检查空状态的方式被不同地评估?
答案 0 :(得分:0)
这是由于empty()的工作原理。比较这句话:
空($ registry-> notEmpty)的结果有点未触动,因为该值显然已设置且非空。这是因为在这些情况下,empty()函数使用__isset()魔法功能。虽然在上面的文档中已经注意到了,但我认为值得一提的更详细,因为行为并不简单。为了获得所需的(exxted?)结果,你需要在你的类中添加__isset()魔术函数:
(摘自php.net:http://php.net/manual/en/function.empty.php,来自用户Janci的评论)