我对魔术消气剂/ isset有奇怪的问题。我有myObject定义魔术吸气剂/ isset:
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()不会调用__isset()。
这对我来说似乎很奇怪,因为PHP应该先尝试检查$ myObject-> notExisting是否存在,然后再尝试获取它,不是吗?
根据文档:
通过对不可访问的属性调用isset()或empty()来触发__isset()。
isset($myObject->notExisting);
isset中的in适用于的notExisting
属性$myObject
。
在isset($myObject->notExisting['ok']));
isset适用于ok
的元件$myObject->notExisting
阵列。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句