动态属性对isset显示错误,但非常下一行回声值


Dynamic propery shows false to isset but very next line echos a value

我在这里有点困惑。当一个对象的值没有设置时,我需要抛出一个异常,但是不管它是设置还是没有设置,它都会抛出我的异常。

我运行

var_dump(isset($this->{$idName}));
var_dump($this->{$idName});

结果是

bool(false) 
string(1) "1" 

我希望第一个是真的。我是不是错过了一些显而易见的东西?

为了明确起见,我试图检查是否设置了存储在$idName中的对象的属性。在这种情况下$idName = "id"
所以$this->id是我正在检查的。

$this->id将从__get()中检索

看起来您缺少神奇的__isset()方法。

public function __isset($name)
{
    return isset($this->data[$name]);
}

根据存储数据的位置进行更改。

来自手册:

__通过对不可访问的属性调用isset()或empty()来触发isset(()。

如果此属性是私有/受保护的,并且您试图使用$this->属性语法从外部直接访问其值,请确保它不仅仅是从您的类__get()魔术方法混合而来。