关于这个错误会有很多疑问,我还没有找到正确的解决方案。我的严格是PHP本身,而不是其他人发布的示例框架。

我试图重载__set__get在数据数组中动态创建这些属性,但是,当我尝试使用下面的示例中的示例创建属性时,出现此错误。但是我可以创建属性,如果它是字符串或整数,那么我不明白为什么它不传递值?


间接修改重载属性:: fields无效


类的getter方法:

public function __get($name)
{
    if (array_key_exists($name, $this->data))
    {
        return $this->data[$name];
    }
}


尝试生成数组字段。 (这种情况下的错误)

$fieldset->fields[] = [
    'handle'      => 'first_name',
    'name'        => 'First Name',
];


这工作正常,但不是我想要的,我希望字段成为索引数组。

$fieldset->fields = [
    'handle'      => 'first_name',
    'name'        => 'First Name',
];


如果没有其他人有更好的方法(如果不可能),我很想知道替代相同结果的方法。多谢你们!

最佳答案

修改__get魔术方法,将reference返回到存储在数组中的属性。通知是说您正在按值获取$this->data[fields]的副本,并在其后附加内容。您将追加到fields变量的副本,而不是存储在类中的实际字段。这对存储在类中的变量没有影响。

当您尝试获取不存在的键(类似于注意未定义的变量)时,也应该抛出异常,或者创建索引并返回对该键的引用。本示例使用后者。

例:

public function &__get($name)
{
    if (!array_key_exists($name, $this->data))
    {
        $this->data[$name] = null;
    }
    return $this->data[$name];
}


演示:https://3v4l.org/sdIWH

关于php - PHP间接修改重载属性-使用ARRAYS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45314024/

10-12 14:56
查看更多