Annotation of embedaddon/php/tests/classes/array_access_010.phpt, revision 1.1.1.2
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: {
1.1.1.2 ! misho 15: echo __METHOD__ . "(Array)\n";
1.1 misho 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) {
1.1.1.2 ! misho 26: echo __METHOD__ . "(Array, $index)\n";
1.1 misho 27: return isset($this->element[$index]) ? $this->element[$index] : NULL;
28: }
29:
30: function offsetSet($index, $value) {
1.1.1.2 ! misho 31: echo __METHOD__ . "(Array, $index, $value)\n";
1.1 misho 32: $this->element[$index] = $value;
33: }
34:
35: function offsetUnset($index) {
1.1.1.2 ! misho 36: echo __METHOD__ . "(Array, $index)\n";
1.1 misho 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>