数组上怪异的PHP魔术获取器

山姆·杰森·布拉多克

我对魔术消气剂/ 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章