首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有数组的重载属性的PHP间接修改

带有数组的重载属性的PHP间接修改
EN

Stack Overflow用户
提问于 2017-07-25 21:44:34
回答 1查看 5.5K关注 0票数 4

会有很多问题与这个错误,我还没有找到正确的解决办法。我的严格使用PHP本身,而不是像其他人发布的例子那样的框架。

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

对重载属性的间接修改::字段没有影响

类吸气法:

代码语言:javascript
运行
复制
public function __get($name)
{
    if (array_key_exists($name, $this->data))
    {
        return $this->data[$name];
    }
}

试图生成一个数组字段。(这是错误的情况)

代码语言:javascript
运行
复制
$fieldset->fields[] = [
    'handle'      => 'first_name',
    'name'        => 'First Name',
];

这个功能很好,但这不是我所要求的,我希望字段是一个索引数组。

代码语言:javascript
运行
复制
$fieldset->fields = [
    'handle'      => 'first_name',
    'name'        => 'First Name',
];

如果其他人有更好的方法,如果这是不可能的,我想知道一个替代同样的结果。谢谢你们!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-25 22:06:19

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

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

示例:

代码语言:javascript
运行
复制
public function &__get($name)
{
    if (!array_key_exists($name, $this->data))
    {
        $this->data[$name] = null;
    }
    return $this->data[$name];
}

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

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45314024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档