duanmianxue2687 2017-02-10 14:06
浏览 47

带有ARRAY_AS_PROPS的嵌套ArrayObject

I'm playing with ArrayObject since some days now, but there is a trick that I can't do.

What I want to do :

MyClass extends ArrayObject {
    public function __construct($input = []) {
        parent::__construct($input, self::ARRAY_AS_PROPS);
    }
}

$a = new MyClass();
$a->foo = 'bar';
var_dump($a->getArrayCopy()); // there should be only one key : "foo"
$a->bar->baz = 'foo';
var_dump($a->getArrayCopy()); // there should be only two keys : "foo", "bar"
echo get_class($a->bar) . "
"; // should be MyClass

But $a->bar is a stdClass, and I have a pretty warning in bonus

If I disable the ARRAY_AS_PROPS flag and override the __get and __set methods I'm close :

function __get($key) {
   if (! $this->offsetExists($key)) {
       $this->offsetSet($key, new self);
   }
   return $this->offsetGet($key)
}

But then, I have this issue :

$a = new MyClass();
$a->foo = 'bar';
var_dump($a->getArrayCopy()); // there is one key ("foo") which is correct

// but when I do anything with the key without affecting some data
isset($a->bar);
var_dump($a->getArrayCopy()); // Now I also have the key "bar" which is not correct

Any suggestion ?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥60 求一个简单的网页(标签-安全|关键词-上传)
    • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
    • ¥15 基于卷积神经网络的声纹识别
    • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
    • ¥100 为什么这个恒流源电路不能恒流?
    • ¥15 有偿求跨组件数据流路径图
    • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
    • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
    • ¥15 CSAPPattacklab
    • ¥15 一直显示正在等待HID—ISP