Annotation of embedaddon/php/ext/spl/tests/arrayObject_magicMethods3.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 -> and ArrayObject::ARRAY_AS_PROPS.
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, ArrayObject::ARRAY_AS_PROPS);
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 (5) {
74: ["a"]=>
75: string(7) "changed"
76: ["b"]=>
77: int(2)
78: ["c"]=>
79: int(3)
80: ["priv":"UsesMagic":private]=>
81: string(6) "secret"
82: ["dynamic"]=>
83: string(11) "new.changed"
84: }
85: Wrapping ArrayObject:
86: object(ArrayObject)#2 (1) {
87: ["storage":"ArrayObject":private]=>
88: object(UsesMagic)#1 (5) {
89: ["a"]=>
90: string(7) "changed"
91: ["b"]=>
92: int(2)
93: ["c"]=>
94: int(3)
95: ["priv":"UsesMagic":private]=>
96: string(6) "secret"
97: ["dynamic"]=>
98: string(11) "new.changed"
99: }
100: }
101:
102: --> Read existent, non-existent and dynamic:
103: string(7) "changed"
104:
105: Notice: Undefined index: nonexistent in %s on line 42
106: NULL
107: string(11) "new.changed"
108: Original wrapped object:
109: object(UsesMagic)#1 (5) {
110: ["a"]=>
111: string(7) "changed"
112: ["b"]=>
113: int(2)
114: ["c"]=>
115: int(3)
116: ["priv":"UsesMagic":private]=>
117: string(6) "secret"
118: ["dynamic"]=>
119: string(11) "new.changed"
120: }
121: Wrapping ArrayObject:
122: object(ArrayObject)#2 (1) {
123: ["storage":"ArrayObject":private]=>
124: object(UsesMagic)#1 (5) {
125: ["a"]=>
126: string(7) "changed"
127: ["b"]=>
128: int(2)
129: ["c"]=>
130: int(3)
131: ["priv":"UsesMagic":private]=>
132: string(6) "secret"
133: ["dynamic"]=>
134: string(11) "new.changed"
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 (5) {
144: ["a"]=>
145: string(7) "changed"
146: ["b"]=>
147: int(2)
148: ["c"]=>
149: int(3)
150: ["priv":"UsesMagic":private]=>
151: string(6) "secret"
152: ["dynamic"]=>
153: string(11) "new.changed"
154: }
155: Wrapping ArrayObject:
156: object(ArrayObject)#2 (1) {
157: ["storage":"ArrayObject":private]=>
158: object(UsesMagic)#1 (5) {
159: ["a"]=>
160: string(7) "changed"
161: ["b"]=>
162: int(2)
163: ["c"]=>
164: int(3)
165: ["priv":"UsesMagic":private]=>
166: string(6) "secret"
167: ["dynamic"]=>
168: string(11) "new.changed"
169: }
170: }
171:
172: --> Unset existent, non-existent and dynamic:
173:
174: Notice: Undefined index: nonexistent in %s on line 60
175: Original wrapped object:
176: object(UsesMagic)#1 (3) {
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 (3) {
188: ["b"]=>
189: int(2)
190: ["c"]=>
191: int(3)
192: ["priv":"UsesMagic":private]=>
193: string(6) "secret"
194: }
195: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>