为什么isset()对于设置的布尔变量返回FALSE并且为TRUE?

时间:2012-05-11 13:53:41

标签: php

我花了最后20分钟试图解决这个问题的原因。

首先我会做

$this->is_csu = TRUE;

在一个单独的类中,我调用isset,isset返回FALSE,如果我立即回显变量,它将返回TRUE。

echo var_dump(isset($this->is_csu));
echo var_dump($this->is_csu);
die();

输出结果

bool(false) bool(true)

我确信有一些技术原因可以解释为什么会发生这种情况,但现在它已超出我的范围。

希望有人可以对此有所了解。

2 个答案:

答案 0 :(得分:2)

你可能会扩展一个私人会员的课程。

请参阅PHP Examples了解如何处理此事。

我获得输出的唯一方法是在类上使用PHP魔术方法,例如:

class A
{
        public function __isset($n)
        {
                $this->$n = TRUE;
        }
}

$bar = new A();
var_dump(isset($bar->foo));
var_dump($bar->foo);

输出:

bool(false)
bool(true)

虽然我认为你已经知道你是否正在使用其中一种。

答案 1 :(得分:0)

我知道这是一个非常古老的问题,但它也发生在我身上,我无法弄清楚原因。

原因是最终这是一个私有或受保护的成员,所以尽管你可以得到它的值,但是isset返回false。

var_dump是有问题的,因为它正在进行反射。