<?php
class MyArray implements ArrayAccess {
private $data = array (); private function realOffset($offset) {
return $offset + count($this->data) * intval($offset < 0); }
public function offsetGet ($offset) {
return $this->data[$this->realOffset($offset)];
}
public function offsetExists ($offset) {
}
public function offsetSet ($offset, $value) {
$this->data[$this->realOffset($offset)] = $value;
}
public function offsetUnset ($offset) {
unset($this->data[$this->realOffset($offset)]); }
public function __construct() {
}
}
$m = new MyArray(4, 5, 6);
echo sprintf("m[0] =%d, m[1] =%d, m[2] =%d\n", $m[0], $m[1], $m[2]); echo sprintf("m[~0]=%d, m[~1]=%d, m[~2]=%d\n", $m[~
0], $m[~
1], $m[~
2]);
PD9waHAKCmNsYXNzIE15QXJyYXkgaW1wbGVtZW50cyBBcnJheUFjY2VzcyAgewogIHByaXZhdGUgJGRhdGEgPSBhcnJheSAoKTsKICBwcml2YXRlIGZ1bmN0aW9uIHJlYWxPZmZzZXQoJG9mZnNldCkgewogICAgcmV0dXJuICRvZmZzZXQgKyBjb3VudCgkdGhpcy0+ZGF0YSkgKiBpbnR2YWwoJG9mZnNldCA8IDApOwogIH0KICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0R2V0ICgkb2Zmc2V0KSB7CiAgICByZXR1cm4gJHRoaXMtPmRhdGFbJHRoaXMtPnJlYWxPZmZzZXQoJG9mZnNldCldOwogIH0KICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0RXhpc3RzICgkb2Zmc2V0KSB7CiAgICByZXR1cm4gYXJyYXlfa2V5X2V4aXN0cyggJG9mZnNldCwgJHRoaXMtPmRhdGEpIAogICAgICAgIHx8IGFycmF5X2tleV9leGlzdHMofiRvZmZzZXQsICR0aGlzLT5kYXRhKTsKICB9CiAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCAoJG9mZnNldCwgJHZhbHVlKSB7CiAgICAkdGhpcy0+ZGF0YVskdGhpcy0+cmVhbE9mZnNldCgkb2Zmc2V0KV0gPSAkdmFsdWU7CiAgfQogIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRVbnNldCAoJG9mZnNldCkgewogICAgdW5zZXQoJHRoaXMtPmRhdGFbJHRoaXMtPnJlYWxPZmZzZXQoJG9mZnNldCldKTsKICB9CiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgewogICAgJHRoaXMtPmRhdGEgPSBmdW5jX2dldF9hcmdzKCk7CiAgfQogfQoKJG0gPSBuZXcgTXlBcnJheSg0LCA1LCA2KTsKZWNobyBzcHJpbnRmKCJtWzBdID0lZCwgbVsxXSA9JWQsIG1bMl0gPSVkXG4iLCAkbVswXSwgICRtWzFdLCAgJG1bMl0pOwplY2hvIHNwcmludGYoIm1bfjBdPSVkLCBtW34xXT0lZCwgbVt+Ml09JWRcbiIsICRtW34wXSwgJG1bfjFdLCAkbVt+Ml0pOwo=