File:
[ELWIX - Embedded LightWeight unIX -] /
embedaddon /
php /
tests /
classes /
array_access_011.phpt
Revision
1.1.1.1 (vendor branch):
download - view:
text,
annotated -
select for diffs -
revision graph
Tue Feb 21 23:48:06 2012 UTC (12 years, 6 months ago) by
misho
Branches:
php,
MAIN
CVS tags:
v5_4_3elwix,
v5_4_29p0,
v5_4_29,
v5_4_20p0,
v5_4_20,
v5_4_17p0,
v5_4_17,
v5_3_10,
HEAD
php
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>