PHP间接修改重载属性 - 使用ARRAYS

时间:2017-07-25 21:44:35

标签: php arrays overloading

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

我正在尝试使用__set__get重载以在数据数组中动态创建这些属性,但是,当我尝试使用以下示例中的类似创建属性时,我收到此错误。但我可以创建属性,如果它是一个字符串或int,所以我不明白为什么它不会传递值?

  

间接修改重载的属性::字段无效

类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',
];

如果其他人有更好的方式,如果这是不可能的,我很想知道相同结果的替代方案。多谢你们!

1 个答案:

答案 0 :(得分:8)

修改__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