PHP、オブジェクトに配列っぽく[]でアクセスできるように

PHP5で追加されたSPLのArrayAccessクラスを使うと、
配列っぽい書き方でクラスにアクセスすることができるみたいです。


配列演算子オーバーロードもしくは PHP 5 の配列エミュレート機能全般
ArrayAccess Interface Reference

<?php
class A implements ArrayAccess
{
    public function __construct(array $array = array()) {
        $this->data = $array;
    }

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

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

    public function offsetSet($offset, $value) {
        if (is_null($offset)) {
            $this->data[] = $value;
        } else {
            $this->data[$offset] = $value;
        }
    }

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

$object = new A(array("a", "b"));
var_dump(isset($object[2])); // bool(false)
echo $object[0]; // a
$object[] = 'value1';
$object['key'] = 'value2';
unset($object[1]);
var_dump($object->data);
/*
array(3) {
  [0]=>
  string(1) "a"
  [2]=>
  string(6) "value1"
  ["key"]=>
  string(6) "value2"
}
 */
  • SPL = Standard PHP Library