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