我开始对PHP的empty()函数产生奇怪的行为。一切都可以正常工作,但是现在不行了,我不明白为什么。
我有一个tbInventory类来表示产品。每单位一条记录。
该类具有getBootloaderRevision方法/属性:
T2[2]
它曾经可以工作,但是现在,即使成员具有值,empty()函数也将返回true。这是一个示例:
public function getBootloaderRevision() {
if (empty($this->cBootloaderRevision)) {
return null;
} else {
return $this->cBootloaderRevision;
}
}
我正在从数据库中加载一个项目,该项目我知道具有BootLoader修订版。我声明并在第一行加载它,然后将MEMBER本身的值直接放入变量中。然后,我同时回显成员和变量,以证明它们都具有值。
然后,根据成员和变量的empty()函数的结果,回显1或0。结果如下:
$prod = new tbInventory($db, 1009);
$test = $prod->cBootloaderRevision;
echo $prod->cBootloaderRevision . "<br>";
echo $test . "<br>";
echo (empty($prod->cBootloaderRevision) ? "1" : "02") . "<br>";
echo (empty($test) ? "1" : "0") . "<br>";
我在这里迷路了。我不明白为什么会这样。我知道它曾经有用,但是我一年多没有碰到它了。我们最近在服务器上进行了更新,自服务器以来似乎已经开始以这种方式进行操作。我不负责更新,但是我认为他们同时更新了OS和PHP。
您见过类似的东西吗?
谢谢
答案 0 :(得分:2)
唯一可以解释此行为的是cBootloaderRevision
不是“物理”属性,而是通过__get
魔术方法检索的,并且该类中没有{{1} }方法已实现,或者该方法返回的结果与__isset
不一致。原因是__get
首先会调用empty
,而__isset
只会调用$prod->cBootloaderRevision
。
请参见http://php.net/manual/en/language.oop5.overloading.php#object.get。