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



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

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

间接修改重载属性 ::字段不起作用

类获取方法:

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]的副本并向其附加一些内容。您正在追加到字段变量的副本,而不是存储在类中的实际字段。这对存储在类中的变量没有影响。

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

例:

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

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

最新更新