ArraySobjectを使用して配列を格納します
-
13-12-2019 - |
質問
アレイを保存し、ArrayObjectを拡張するカスタムクラスを使用してそのアレイを操作しようとしています。
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]);
}
}
.
問題は私がこれを行うならば:
$foo = new MyArrayObject();
$foo['blah'] = array('name' => 'bob');
$foo['blah']['name'] = 'fred';
echo $foo['blah']['name'];
.
出力はボブであり、フレッドではありません。上記4行を変更せずにこれを働くことができる方法はありますか?
解決
ArrayAccessの既知の動作です( "PHP通知:MyArayObjectの過負荷要素の間接修正は効果がありません)。
http://php.net/manual/en/class.arrayaccess.php
public function offsetSet($offset, $data) {
if (is_array($data)) $data = new self($data);
if ($offset === null) {
$this->data[] = $data;
} else {
$this->data[$offset] = $data;
}
}
. 所属していません StackOverflow