为什么 isset() 为已设置且为 TRUE 的布尔变量返回 FALSE


Why is isset() returning FALSE for a boolean variable that is set and is TRUE?

我花了最后 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)

我确信发生这种情况有一些技术原因,但现在超出了我的范围。

希望有人能对此有所了解。

您可能使用私有成员扩展类。

请参阅 PHP 示例,了解如何处理此问题。

我获得输出的唯一方法是在类上使用 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)

虽然我想你已经知道你是否正在使用其中之一。

我知道这是一个非常古老的问题,但它也发生在我身上,我不知道为什么。

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

var_dump是有问题的,因为它正在做反思。