首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ArrayObject存储数组

使用ArrayObject存储数组
EN

Stack Overflow用户
提问于 2012-05-22 21:50:53
回答 1查看 183关注 0票数 2

我正在尝试存储一个数组,并使用扩展ArrayObject的自定义类来操作该数组。

代码语言:javascript
复制
class MyArrayObject extends ArrayObject {
    protected $data = array();

    public function offsetGet($name) {
        return $this->data[$name];
    }

    public function offsetSet($name, $value) {
        $this->data[$name] = $value;
    }

    public function offsetExists($name) {
        return isset($this->data[$name]);
    }

    public function offsetUnset($name) {
        unset($this->data[$name]);
    }
}

问题是如果我这样做:

代码语言:javascript
复制
$foo = new MyArrayObject();
$foo['blah'] = array('name' => 'bob');
$foo['blah']['name'] = 'fred';
echo $foo['blah']['name'];

输出是bob而不是fred。有没有办法在不改变上面的4行代码的情况下让它工作呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-22 22:04:54

这是ArrayAccess的一个已知行为("PHP通知:间接修改MyArrayObject的重载元素没有任何效果“...)。

http://php.net/manual/en/class.arrayaccess.php

在MyArrayObject中实现:

代码语言:javascript
复制
public function offsetSet($offset, $data) {
    if (is_array($data)) $data = new self($data);
    if ($offset === null) {
        $this->data[] = $data;
    } else {
        $this->data[$offset] = $data;
    }
} 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10703443

复制
相关文章

相似问题

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