我有魔术getter / isset的奇怪问题.
我有定义魔术getter / isset的myObject:
private $_data = array();
public function __get($name) {
if (array_key_exists($name, $this->_data)) return $this->_data[$name];
throw new Exception($name.': property doesn\'t exist.');
}
public function __isset($name) {
return isset($this->_data[$name]);
}
如果我打电话:
isset($myObject->notExisting);
empty($myObject->notExisting);
我有正确的行为(__ isset()被调用),而如果我打电话:
isset($myObject->notExisting['ok']));
empty($myObject->notExisting['ok']));
__get()是在__get()时调用的.
这对我来说似乎很奇怪,因为PHP在尝试获取它之前应首先检查$myObject-> notExisting存在,不应该吗?
解决方法:
根据docs:
__isset() is triggered by calling isset() or empty() on inaccessible properties.
in isset($myObject-> notExisting); isset适用于$myObject的notExisting属性.
in isset($myObject-> notExisting [‘ok’])); isset适用于$myObject-> notExisting数组的ok元素.