奇怪的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元素.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...