微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

奇怪的PHP魔术吸气剂在阵列上

我有魔术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元素.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐