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