gpt4 book ai didi

php - 数组上奇怪的 PHP 魔法 setter/getter

转载 作者:可可西里 更新时间:2023-10-31 23:02:47 25 4
gpt4 key购买 nike

我对 magic 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() 时不调用 __isset()。

这对我来说似乎很奇怪,因为 PHP 应该在尝试获取它之前首先检查 $myObject->notExisting 是否存在,不是吗?

最佳答案

根据docs :

__isset() is triggered by calling isset() or empty() on inaccessible properties.

isset($myObject->notExisting);中isset应用于$myObjectnotExisting属性。

isset($myObject->notExisting['ok'])); isset适用于$myObject->notExistingok元素> 数组。

关于php - 数组上奇怪的 PHP 魔法 setter/getter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35032578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com