【发布时间】:2015-01-02 08:14:26
【问题描述】:
我正在尝试为 PHP 中与多维数组一起使用的对象创建一个 __set。这甚至可能吗?
我希望能够做到以下几点:$post->comments[0]['uid']=3;。但是,cmets 实际上将成为私有缓存变量$_cache['comments']=array() 中的一个键。如果 __set 函数能够以某种方式获取基本键 (cmets) 和索引 (0) 以及它正在设置的键/值 (uid/3),那就太好了。但是,这是不可能的。
我曾考虑过制作 $_cache['comments'] 和 ArrayObjects 数组,但这不会让我定义自定义 _get/_set 重载。相反,我认为我最终可能不得不创建一个新的 Comments 对象,然后用这些对象填充数组。但是,我真的不想这样做,如果 PHP 能以某种方式处理 __set 重载中的嵌套数组,那就太好了。
我正在使用 Mongo,希望每个文档只有一个对象。但是,Mongo 中的数组对象给我带来了一些问题。我想在 PHP 中将它们作为数组处理,但这似乎不可能。设置器需要获取$post->comments[0]['uid']=3 并更新缓存以及设置$this->data['comments'][0]['uid']=3。
我知道如果 cmets 是一个对象数组,我可以这样做:
$post->comments[0]->uid=3;
///Sets $_cache['comments'][0]->uid=3;
它会起作用,因为 cmets 的 getter 会返回对象数组并允许它访问 uid 属性。然后我可以在 cmets 对象中有一个 getter/setter,它可以通过伪“朋友”函数/hack 以某种方式编辑 $post->data。但是,我看不到使用数组完成此任务的简单方法....
有什么建议吗?
【问题讨论】:
标签: php mongodb object getter-setter