Annotation of embedaddon/php/tests/classes/array_access_009.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: ZE2 ArrayAccess and ArrayProxyAccess, ArrayProxy
! 3: --FILE--
! 4: <?php
! 5:
! 6: // NOTE: This will become part of SPL
! 7:
! 8: interface ArrayProxyAccess extends ArrayAccess
! 9: {
! 10: function proxyGet($element);
! 11: function proxySet($element, $index, $value);
! 12: function proxyUnset($element, $index);
! 13: }
! 14:
! 15: class ArrayProxy implements ArrayAccess
! 16: {
! 17: private $object;
! 18: private $element;
! 19:
! 20: function __construct(ArrayProxyAccess $object, $element)
! 21: {
! 22: echo __METHOD__ . "($element)\n";
! 23: if (!$object->offsetExists($element))
! 24: {
! 25: $object[$element] = array();
! 26: }
! 27: $this->object = $object;
! 28: $this->element = $element;
! 29: }
! 30:
! 31: function offsetExists($index) {
! 32: echo __METHOD__ . "($this->element, $index)\n";
! 33: return array_key_exists($index, $this->object->proxyGet($this->element));
! 34: }
! 35:
! 36: function offsetGet($index) {
! 37: echo __METHOD__ . "($this->element, $index)\n";
! 38: $tmp = $this->object->proxyGet($this->element);
! 39: return isset($tmp[$index]) ? $tmp[$index] : NULL;
! 40: }
! 41:
! 42: function offsetSet($index, $value) {
! 43: echo __METHOD__ . "($this->element, $index, $value)\n";
! 44: $this->object->proxySet($this->element, $index, $value);
! 45: }
! 46:
! 47: function offsetUnset($index) {
! 48: echo __METHOD__ . "($this->element, $index)\n";
! 49: $this->object->proxyUnset($this->element, $index);
! 50: }
! 51: }
! 52:
! 53: class Peoples implements ArrayProxyAccess
! 54: {
! 55: public $person;
! 56:
! 57: function __construct()
! 58: {
! 59: $this->person = array(array('name'=>'Foo'));
! 60: }
! 61:
! 62: function offsetExists($index)
! 63: {
! 64: return array_key_exists($index, $this->person);
! 65: }
! 66:
! 67: function offsetGet($index)
! 68: {
! 69: return new ArrayProxy($this, $index);
! 70: }
! 71:
! 72: function offsetSet($index, $value)
! 73: {
! 74: $this->person[$index] = $value;
! 75: }
! 76:
! 77: function offsetUnset($index)
! 78: {
! 79: unset($this->person[$index]);
! 80: }
! 81:
! 82: function proxyGet($element)
! 83: {
! 84: return $this->person[$element];
! 85: }
! 86:
! 87: function proxySet($element, $index, $value)
! 88: {
! 89: $this->person[$element][$index] = $value;
! 90: }
! 91:
! 92: function proxyUnset($element, $index)
! 93: {
! 94: unset($this->person[$element][$index]);
! 95: }
! 96: }
! 97:
! 98: $people = new Peoples;
! 99:
! 100: var_dump($people->person[0]['name']);
! 101: $people->person[0]['name'] = $people->person[0]['name'] . 'Bar';
! 102: var_dump($people->person[0]['name']);
! 103: $people->person[0]['name'] .= 'Baz';
! 104: var_dump($people->person[0]['name']);
! 105:
! 106: echo "===ArrayOverloading===\n";
! 107:
! 108: $people = new Peoples;
! 109:
! 110: var_dump($people[0]);
! 111: var_dump($people[0]['name']);
! 112: $people[0]['name'] = 'FooBar';
! 113: var_dump($people[0]['name']);
! 114: $people[0]['name'] = $people->person[0]['name'] . 'Bar';
! 115: var_dump($people[0]['name']);
! 116: $people[0]['name'] .= 'Baz';
! 117: var_dump($people[0]['name']);
! 118: unset($people[0]['name']);
! 119: var_dump($people[0]);
! 120: var_dump($people[0]['name']);
! 121: $people[0]['name'] = 'BlaBla';
! 122: var_dump($people[0]['name']);
! 123:
! 124: ?>
! 125: ===DONE===
! 126: --EXPECTF--
! 127: string(3) "Foo"
! 128: string(6) "FooBar"
! 129: string(9) "FooBarBaz"
! 130: ===ArrayOverloading===
! 131: ArrayProxy::__construct(0)
! 132: object(ArrayProxy)#%d (2) {
! 133: ["object":"ArrayProxy":private]=>
! 134: object(Peoples)#%d (1) {
! 135: ["person"]=>
! 136: array(1) {
! 137: [0]=>
! 138: array(1) {
! 139: ["name"]=>
! 140: string(3) "Foo"
! 141: }
! 142: }
! 143: }
! 144: ["element":"ArrayProxy":private]=>
! 145: int(0)
! 146: }
! 147: ArrayProxy::__construct(0)
! 148: ArrayProxy::offsetGet(0, name)
! 149: string(3) "Foo"
! 150: ArrayProxy::__construct(0)
! 151: ArrayProxy::offsetSet(0, name, FooBar)
! 152: ArrayProxy::__construct(0)
! 153: ArrayProxy::offsetGet(0, name)
! 154: string(6) "FooBar"
! 155: ArrayProxy::__construct(0)
! 156: ArrayProxy::offsetSet(0, name, FooBarBar)
! 157: ArrayProxy::__construct(0)
! 158: ArrayProxy::offsetGet(0, name)
! 159: string(9) "FooBarBar"
! 160: ArrayProxy::__construct(0)
! 161: ArrayProxy::offsetGet(0, name)
! 162: ArrayProxy::offsetSet(0, name, FooBarBarBaz)
! 163: ArrayProxy::__construct(0)
! 164: ArrayProxy::offsetGet(0, name)
! 165: string(12) "FooBarBarBaz"
! 166: ArrayProxy::__construct(0)
! 167: ArrayProxy::offsetUnset(0, name)
! 168: ArrayProxy::__construct(0)
! 169: object(ArrayProxy)#%d (2) {
! 170: ["object":"ArrayProxy":private]=>
! 171: object(Peoples)#%d (1) {
! 172: ["person"]=>
! 173: array(1) {
! 174: [0]=>
! 175: array(0) {
! 176: }
! 177: }
! 178: }
! 179: ["element":"ArrayProxy":private]=>
! 180: int(0)
! 181: }
! 182: ArrayProxy::__construct(0)
! 183: ArrayProxy::offsetGet(0, name)
! 184: NULL
! 185: ArrayProxy::__construct(0)
! 186: ArrayProxy::offsetSet(0, name, BlaBla)
! 187: ArrayProxy::__construct(0)
! 188: ArrayProxy::offsetGet(0, name)
! 189: string(6) "BlaBla"
! 190: ===DONE===
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>