我有一个类在返回值之前覆盖__get
。为什么empty()
总是会返回?它的作用就像if __call
在函数空后而不是之前返回一个值。
<?php
class ref_dummy {
private $_data = array();
public function __get($name) {
if (array_key_exists($name, $this->_data)) return $this->_data[$name];
$this->_data[$name] = 'bar'; // load sample data
return $this->_data[$name];
}
}
$dummy = new ref_dummy();
if (empty($dummy->foo)) echo 'is empty' . '<br/>';
else echo $dummy->foo . '<br/>';
?>
我知道($dummy->foo)
是否有效,但我想知道为什么empty()
没有。
答案 0 :(得分:1)
这个帖子解决了我的问题:empty() returning TRUE on object's non-empty property
解决方案是同时使用__get和__isset。
class ref_dummy {
private $_data = array();
public function __isset($name) {
return $this->__get($name);
}
public function __get($name) {
if (array_key_exists($name, $this->_data)) return $this->_data[$name];
$this->_data[$name] = 'bar'; // load sample data
return $this->_data[$name];
}
}
答案 1 :(得分:1)
要通过空检查,您需要实施魔法__isset
。
在你的情况下,它将像
public function __isset($name){
return isset($this->_data[$name]);
}