Annotation of embedaddon/php/ext/spl/tests/arrayObject_magicMethods2.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: SPL: ArrayObject: ensure a wrapped object's magic methods for property access are not invoked when manipulating the ArrayObject's elements using ->.
3: --FILE--
4: <?php
5: class UsesMagic {
6: public $a = 1;
7: public $b = 2;
8: public $c = 3;
9:
10: private $priv = 'secret';
11:
12: function __get($name) {
13: $args = func_get_args();
14: echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
15: }
16: function __set($name, $value) {
17: $args = func_get_args();
18: echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
19: }
20: function __isset($name) {
21: $args = func_get_args();
22: echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
23: }
24: function __unset($name) {
25: $args = func_get_args();
26: echo "In " . __METHOD__ . "(" . implode($args, ',') . ")\n";
27: }
28:
29: }
30:
31: $obj = new UsesMagic;
32:
33: $ao = new ArrayObject($obj);
34: echo "\n--> Write existent, non-existent and dynamic:\n";
35: $ao->a = 'changed';
36: $ao->dynamic = 'new';
37: $ao->dynamic = 'new.changed';
38: echo " Original wrapped object:\n";
39: var_dump($obj);
40: echo " Wrapping ArrayObject:\n";
41: var_dump($ao);
42:
43: echo "\n--> Read existent, non-existent and dynamic:\n";
44: var_dump($ao->a);
45: var_dump($ao->nonexistent);
46: var_dump($ao->dynamic);
47: echo " Original wrapped object:\n";
48: var_dump($obj);
49: echo " Wrapping ArrayObject:\n";
50: var_dump($ao);
51:
52: echo "\n--> isset existent, non-existent and dynamic:\n";
53: var_dump(isset($ao->a));
54: var_dump(isset($ao->nonexistent));
55: var_dump(isset($ao->dynamic));
56: echo " Original wrapped object:\n";
57: var_dump($obj);
58: echo " Wrapping ArrayObject:\n";
59: var_dump($ao);
60:
61: echo "\n--> Unset existent, non-existent and dynamic:\n";
62: unset($ao->a);
63: unset($ao->nonexistent);
64: unset($ao->dynamic);
65: echo " Original wrapped object:\n";
66: var_dump($obj);
67: echo " Wrapping ArrayObject:\n";
68: var_dump($ao);
69: ?>
70: --EXPECTF--
71: --> Write existent, non-existent and dynamic:
72: Original wrapped object:
73: object(UsesMagic)#1 (4) {
74: ["a"]=>
75: int(1)
76: ["b"]=>
77: int(2)
78: ["c"]=>
79: int(3)
80: ["priv":"UsesMagic":private]=>
81: string(6) "secret"
82: }
83: Wrapping ArrayObject:
84: object(ArrayObject)#2 (3) {
85: ["a"]=>
86: string(7) "changed"
87: ["dynamic"]=>
88: string(11) "new.changed"
89: ["storage":"ArrayObject":private]=>
90: object(UsesMagic)#1 (4) {
91: ["a"]=>
92: int(1)
93: ["b"]=>
94: int(2)
95: ["c"]=>
96: int(3)
97: ["priv":"UsesMagic":private]=>
98: string(6) "secret"
99: }
100: }
101:
102: --> Read existent, non-existent and dynamic:
103: string(7) "changed"
104:
105: Notice: Undefined property: ArrayObject::$nonexistent in %s on line 42
106: NULL
107: string(11) "new.changed"
108: Original wrapped object:
109: object(UsesMagic)#1 (4) {
110: ["a"]=>
111: int(1)
112: ["b"]=>
113: int(2)
114: ["c"]=>
115: int(3)
116: ["priv":"UsesMagic":private]=>
117: string(6) "secret"
118: }
119: Wrapping ArrayObject:
120: object(ArrayObject)#2 (3) {
121: ["a"]=>
122: string(7) "changed"
123: ["dynamic"]=>
124: string(11) "new.changed"
125: ["storage":"ArrayObject":private]=>
126: object(UsesMagic)#1 (4) {
127: ["a"]=>
128: int(1)
129: ["b"]=>
130: int(2)
131: ["c"]=>
132: int(3)
133: ["priv":"UsesMagic":private]=>
134: string(6) "secret"
135: }
136: }
137:
138: --> isset existent, non-existent and dynamic:
139: bool(true)
140: bool(false)
141: bool(true)
142: Original wrapped object:
143: object(UsesMagic)#1 (4) {
144: ["a"]=>
145: int(1)
146: ["b"]=>
147: int(2)
148: ["c"]=>
149: int(3)
150: ["priv":"UsesMagic":private]=>
151: string(6) "secret"
152: }
153: Wrapping ArrayObject:
154: object(ArrayObject)#2 (3) {
155: ["a"]=>
156: string(7) "changed"
157: ["dynamic"]=>
158: string(11) "new.changed"
159: ["storage":"ArrayObject":private]=>
160: object(UsesMagic)#1 (4) {
161: ["a"]=>
162: int(1)
163: ["b"]=>
164: int(2)
165: ["c"]=>
166: int(3)
167: ["priv":"UsesMagic":private]=>
168: string(6) "secret"
169: }
170: }
171:
172: --> Unset existent, non-existent and dynamic:
173: Original wrapped object:
174: object(UsesMagic)#1 (4) {
175: ["a"]=>
176: int(1)
177: ["b"]=>
178: int(2)
179: ["c"]=>
180: int(3)
181: ["priv":"UsesMagic":private]=>
182: string(6) "secret"
183: }
184: Wrapping ArrayObject:
185: object(ArrayObject)#2 (1) {
186: ["storage":"ArrayObject":private]=>
187: object(UsesMagic)#1 (4) {
188: ["a"]=>
189: int(1)
190: ["b"]=>
191: int(2)
192: ["c"]=>
193: int(3)
194: ["priv":"UsesMagic":private]=>
195: string(6) "secret"
196: }
197: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>