会有很多问题与这个错误,我还没有找到正确的解决办法。我的严格使用PHP本身,而不是像其他人发布的例子那样的框架。
我试图用__set
和__get
重载这些属性,以便在数据数组中动态创建这些属性,但是,当我尝试创建一个属性时,如下面的示例所示,我会收到这个错误。但是如果它是字符串或int,我可以创建属性,所以我不明白为什么它不会传递值?
对重载属性的间接修改::字段没有影响
类吸气法:
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',
];
如果其他人有更好的方法,如果这是不可能的,我想知道一个替代同样的结果。谢谢你们!
发布于 2017-07-25 22:06:19
修改__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://stackoverflow.com/questions/45314024
复制相似问题