xref: /PHP-7.4/ext/spl/tests/array_017.phpt (revision 782352c5)
1--TEST--
2SPL: ArrayObject::exchangeArray($this)
3--FILE--
4<?php
5
6class ArrayIteratorEx extends ArrayIterator
7{
8	public    $pub2 = 1;
9	protected $pro2 = 2;
10	private   $pri2 = 3;
11
12	function __construct($ar, $flags = 0)
13	{
14		echo __METHOD__ . "()\n";
15		parent::__construct($ar, $flags);
16		$this->imp2 = 4;
17	}
18
19	function dump()
20	{
21		echo __METHOD__ . "()\n";
22		var_dump(array('Flags'=>$this->getFlags()
23		              ,'OVars'=>get_object_vars($this)
24		              ,'$this'=>$this));
25	}
26
27	function setFlags($flags)
28	{
29		echo __METHOD__ . "($flags)\n";
30		ArrayIterator::setFlags($flags);
31	}
32}
33
34class ArrayObjectEx extends ArrayObject
35{
36	public    $pub1 = 1;
37	protected $pro1 = 2;
38	private   $pri1 = 3;
39
40	function __construct($ar = array(), $flags = 0)
41	{
42		echo __METHOD__ . "()\n";
43		parent::__construct($ar, $flags);
44		$this->imp1 = 4;
45	}
46
47	function exchange()
48	{
49		echo __METHOD__ . "()\n";
50		$this->exchangeArray($this);
51	}
52
53	function dump()
54	{
55		echo __METHOD__ . "()\n";
56		var_dump(array('Flags'=>$this->getFlags()
57		              ,'OVars'=>get_object_vars($this)
58		              ,'$this'=>$this));
59	}
60
61	function show()
62	{
63		echo __METHOD__ . "()\n";
64		foreach($this as $n => $v)
65		{
66			var_dump(array($n => $v));
67		}
68	}
69
70	function setFlags($flags)
71	{
72		echo __METHOD__ . "($flags)\n";
73		ArrayObject::setFlags($flags);
74	}
75
76	function getIterator()
77	{
78		echo __METHOD__ . "()\n";
79		$it = new ArrayIteratorEx($this, $this->getFlags());
80		$it->dyn2 = 5;
81		$it->dump();
82		return $it;
83	}
84}
85
86function check($obj, $flags)
87{
88	echo "===CHECK===\n";
89
90	$obj->setFlags($flags);
91	$obj->dump();
92	$obj->show();
93
94	echo "===FOREACH===\n";
95
96	$it = $obj->getIterator();
97	foreach($it as $n => $v)
98	{
99		var_dump(array($n => $v));
100	}
101
102	echo "===PROPERTY===\n";
103
104	var_dump($obj->pub1);
105	var_dump(isset($obj->a));
106	$obj->setFlags($flags | 2);
107	var_dump($obj->pub1);
108	var_dump(isset($obj->a));
109
110	var_dump($it->pub2);
111	var_dump(isset($it->pub1));
112	$it->setFlags($flags | 2);
113	var_dump($it->pub2);
114	var_dump(isset($it->pub1));
115}
116
117$obj = new ArrayObjectEx(array(0=>1,'a'=>25, 'pub1'=>42), 0);
118$obj->dyn1 = 5;
119
120check($obj, 0);
121check($obj, 1);
122
123echo "#####EXCHANGE#####\n";
124
125$obj->exchange();
126
127check($obj, 0);
128check($obj, 1);
129
130?>
131===DONE===
132<?php exit(0); ?>
133--EXPECTF--
134ArrayObjectEx::__construct()
135===CHECK===
136ArrayObjectEx::setFlags(0)
137ArrayObjectEx::dump()
138array(3) {
139  ["Flags"]=>
140  int(0)
141  ["OVars"]=>
142  array(5) {
143    ["pub1"]=>
144    int(1)
145    ["pro1"]=>
146    int(2)
147    ["pri1"]=>
148    int(3)
149    ["imp1"]=>
150    int(4)
151    ["dyn1"]=>
152    int(5)
153  }
154  ["$this"]=>
155  object(ArrayObjectEx)#%d (6) {
156    ["pub1"]=>
157    int(1)
158    ["pro1":protected]=>
159    int(2)
160    ["pri1":"ArrayObjectEx":private]=>
161    int(3)
162    ["imp1"]=>
163    int(4)
164    ["dyn1"]=>
165    int(5)
166    ["storage":"ArrayObject":private]=>
167    array(3) {
168      [0]=>
169      int(1)
170      ["a"]=>
171      int(25)
172      ["pub1"]=>
173      int(42)
174    }
175  }
176}
177ArrayObjectEx::show()
178ArrayObjectEx::getIterator()
179ArrayIteratorEx::__construct()
180ArrayIteratorEx::dump()
181array(3) {
182  ["Flags"]=>
183  int(0)
184  ["OVars"]=>
185  array(5) {
186    ["pub2"]=>
187    int(1)
188    ["pro2"]=>
189    int(2)
190    ["pri2"]=>
191    int(3)
192    ["imp2"]=>
193    int(4)
194    ["dyn2"]=>
195    int(5)
196  }
197  ["$this"]=>
198  object(ArrayIteratorEx)#%d (6) {
199    ["pub2"]=>
200    int(1)
201    ["pro2":protected]=>
202    int(2)
203    ["pri2":"ArrayIteratorEx":private]=>
204    int(3)
205    ["imp2"]=>
206    int(4)
207    ["dyn2"]=>
208    int(5)
209    ["storage":"ArrayIterator":private]=>
210    object(ArrayObjectEx)#%d (6) {
211      ["pub1"]=>
212      int(1)
213      ["pro1":protected]=>
214      int(2)
215      ["pri1":"ArrayObjectEx":private]=>
216      int(3)
217      ["imp1"]=>
218      int(4)
219      ["dyn1"]=>
220      int(5)
221      ["storage":"ArrayObject":private]=>
222      array(3) {
223        [0]=>
224        int(1)
225        ["a"]=>
226        int(25)
227        ["pub1"]=>
228        int(42)
229      }
230    }
231  }
232}
233array(1) {
234  [0]=>
235  int(1)
236}
237array(1) {
238  ["a"]=>
239  int(25)
240}
241array(1) {
242  ["pub1"]=>
243  int(42)
244}
245===FOREACH===
246ArrayObjectEx::getIterator()
247ArrayIteratorEx::__construct()
248ArrayIteratorEx::dump()
249array(3) {
250  ["Flags"]=>
251  int(0)
252  ["OVars"]=>
253  array(5) {
254    ["pub2"]=>
255    int(1)
256    ["pro2"]=>
257    int(2)
258    ["pri2"]=>
259    int(3)
260    ["imp2"]=>
261    int(4)
262    ["dyn2"]=>
263    int(5)
264  }
265  ["$this"]=>
266  object(ArrayIteratorEx)#%d (6) {
267    ["pub2"]=>
268    int(1)
269    ["pro2":protected]=>
270    int(2)
271    ["pri2":"ArrayIteratorEx":private]=>
272    int(3)
273    ["imp2"]=>
274    int(4)
275    ["dyn2"]=>
276    int(5)
277    ["storage":"ArrayIterator":private]=>
278    object(ArrayObjectEx)#%d (6) {
279      ["pub1"]=>
280      int(1)
281      ["pro1":protected]=>
282      int(2)
283      ["pri1":"ArrayObjectEx":private]=>
284      int(3)
285      ["imp1"]=>
286      int(4)
287      ["dyn1"]=>
288      int(5)
289      ["storage":"ArrayObject":private]=>
290      array(3) {
291        [0]=>
292        int(1)
293        ["a"]=>
294        int(25)
295        ["pub1"]=>
296        int(42)
297      }
298    }
299  }
300}
301array(1) {
302  [0]=>
303  int(1)
304}
305array(1) {
306  ["a"]=>
307  int(25)
308}
309array(1) {
310  ["pub1"]=>
311  int(42)
312}
313===PROPERTY===
314int(1)
315bool(false)
316ArrayObjectEx::setFlags(2)
317int(1)
318bool(true)
319int(1)
320bool(false)
321ArrayIteratorEx::setFlags(2)
322int(1)
323bool(true)
324===CHECK===
325ArrayObjectEx::setFlags(1)
326ArrayObjectEx::dump()
327array(3) {
328  ["Flags"]=>
329  int(1)
330  ["OVars"]=>
331  array(5) {
332    ["pub1"]=>
333    int(1)
334    ["pro1"]=>
335    int(2)
336    ["pri1"]=>
337    int(3)
338    ["imp1"]=>
339    int(4)
340    ["dyn1"]=>
341    int(5)
342  }
343  ["$this"]=>
344  object(ArrayObjectEx)#%d (6) {
345    ["pub1"]=>
346    int(1)
347    ["pro1":protected]=>
348    int(2)
349    ["pri1":"ArrayObjectEx":private]=>
350    int(3)
351    ["imp1"]=>
352    int(4)
353    ["dyn1"]=>
354    int(5)
355    ["storage":"ArrayObject":private]=>
356    array(3) {
357      [0]=>
358      int(1)
359      ["a"]=>
360      int(25)
361      ["pub1"]=>
362      int(42)
363    }
364  }
365}
366ArrayObjectEx::show()
367ArrayObjectEx::getIterator()
368ArrayIteratorEx::__construct()
369ArrayIteratorEx::dump()
370array(3) {
371  ["Flags"]=>
372  int(1)
373  ["OVars"]=>
374  array(5) {
375    ["pub2"]=>
376    int(1)
377    ["pro2"]=>
378    int(2)
379    ["pri2"]=>
380    int(3)
381    ["imp2"]=>
382    int(4)
383    ["dyn2"]=>
384    int(5)
385  }
386  ["$this"]=>
387  object(ArrayIteratorEx)#%d (6) {
388    ["pub2"]=>
389    int(1)
390    ["pro2":protected]=>
391    int(2)
392    ["pri2":"ArrayIteratorEx":private]=>
393    int(3)
394    ["imp2"]=>
395    int(4)
396    ["dyn2"]=>
397    int(5)
398    ["storage":"ArrayIterator":private]=>
399    object(ArrayObjectEx)#%d (6) {
400      ["pub1"]=>
401      int(1)
402      ["pro1":protected]=>
403      int(2)
404      ["pri1":"ArrayObjectEx":private]=>
405      int(3)
406      ["imp1"]=>
407      int(4)
408      ["dyn1"]=>
409      int(5)
410      ["storage":"ArrayObject":private]=>
411      array(3) {
412        [0]=>
413        int(1)
414        ["a"]=>
415        int(25)
416        ["pub1"]=>
417        int(42)
418      }
419    }
420  }
421}
422array(1) {
423  [0]=>
424  int(1)
425}
426array(1) {
427  ["a"]=>
428  int(25)
429}
430array(1) {
431  ["pub1"]=>
432  int(42)
433}
434===FOREACH===
435ArrayObjectEx::getIterator()
436ArrayIteratorEx::__construct()
437ArrayIteratorEx::dump()
438array(3) {
439  ["Flags"]=>
440  int(1)
441  ["OVars"]=>
442  array(5) {
443    ["pub2"]=>
444    int(1)
445    ["pro2"]=>
446    int(2)
447    ["pri2"]=>
448    int(3)
449    ["imp2"]=>
450    int(4)
451    ["dyn2"]=>
452    int(5)
453  }
454  ["$this"]=>
455  object(ArrayIteratorEx)#%d (6) {
456    ["pub2"]=>
457    int(1)
458    ["pro2":protected]=>
459    int(2)
460    ["pri2":"ArrayIteratorEx":private]=>
461    int(3)
462    ["imp2"]=>
463    int(4)
464    ["dyn2"]=>
465    int(5)
466    ["storage":"ArrayIterator":private]=>
467    object(ArrayObjectEx)#%d (6) {
468      ["pub1"]=>
469      int(1)
470      ["pro1":protected]=>
471      int(2)
472      ["pri1":"ArrayObjectEx":private]=>
473      int(3)
474      ["imp1"]=>
475      int(4)
476      ["dyn1"]=>
477      int(5)
478      ["storage":"ArrayObject":private]=>
479      array(3) {
480        [0]=>
481        int(1)
482        ["a"]=>
483        int(25)
484        ["pub1"]=>
485        int(42)
486      }
487    }
488  }
489}
490array(1) {
491  [0]=>
492  int(1)
493}
494array(1) {
495  ["a"]=>
496  int(25)
497}
498array(1) {
499  ["pub1"]=>
500  int(42)
501}
502===PROPERTY===
503int(1)
504bool(false)
505ArrayObjectEx::setFlags(3)
506int(1)
507bool(true)
508int(1)
509bool(false)
510ArrayIteratorEx::setFlags(3)
511int(1)
512bool(true)
513#####EXCHANGE#####
514ArrayObjectEx::exchange()
515===CHECK===
516ArrayObjectEx::setFlags(0)
517ArrayObjectEx::dump()
518array(3) {
519  ["Flags"]=>
520  int(0)
521  ["OVars"]=>
522  array(5) {
523    ["pub1"]=>
524    int(1)
525    ["pro1"]=>
526    int(2)
527    ["pri1"]=>
528    int(3)
529    ["imp1"]=>
530    int(4)
531    ["dyn1"]=>
532    int(5)
533  }
534  ["$this"]=>
535  object(ArrayObjectEx)#%d (5) {
536    ["pub1"]=>
537    int(1)
538    ["pro1":protected]=>
539    int(2)
540    ["pri1":"ArrayObjectEx":private]=>
541    int(3)
542    ["imp1"]=>
543    int(4)
544    ["dyn1"]=>
545    int(5)
546  }
547}
548ArrayObjectEx::show()
549ArrayObjectEx::getIterator()
550ArrayIteratorEx::__construct()
551ArrayIteratorEx::dump()
552array(3) {
553  ["Flags"]=>
554  int(0)
555  ["OVars"]=>
556  array(5) {
557    ["pub2"]=>
558    int(1)
559    ["pro2"]=>
560    int(2)
561    ["pri2"]=>
562    int(3)
563    ["imp2"]=>
564    int(4)
565    ["dyn2"]=>
566    int(5)
567  }
568  ["$this"]=>
569  object(ArrayIteratorEx)#%d (6) {
570    ["pub2"]=>
571    int(1)
572    ["pro2":protected]=>
573    int(2)
574    ["pri2":"ArrayIteratorEx":private]=>
575    int(3)
576    ["imp2"]=>
577    int(4)
578    ["dyn2"]=>
579    int(5)
580    ["storage":"ArrayIterator":private]=>
581    object(ArrayObjectEx)#%d (5) {
582      ["pub1"]=>
583      int(1)
584      ["pro1":protected]=>
585      int(2)
586      ["pri1":"ArrayObjectEx":private]=>
587      int(3)
588      ["imp1"]=>
589      int(4)
590      ["dyn1"]=>
591      int(5)
592    }
593  }
594}
595array(1) {
596  ["pub1"]=>
597  int(1)
598}
599array(1) {
600  ["imp1"]=>
601  int(4)
602}
603array(1) {
604  ["dyn1"]=>
605  int(5)
606}
607===FOREACH===
608ArrayObjectEx::getIterator()
609ArrayIteratorEx::__construct()
610ArrayIteratorEx::dump()
611array(3) {
612  ["Flags"]=>
613  int(0)
614  ["OVars"]=>
615  array(5) {
616    ["pub2"]=>
617    int(1)
618    ["pro2"]=>
619    int(2)
620    ["pri2"]=>
621    int(3)
622    ["imp2"]=>
623    int(4)
624    ["dyn2"]=>
625    int(5)
626  }
627  ["$this"]=>
628  object(ArrayIteratorEx)#%d (6) {
629    ["pub2"]=>
630    int(1)
631    ["pro2":protected]=>
632    int(2)
633    ["pri2":"ArrayIteratorEx":private]=>
634    int(3)
635    ["imp2"]=>
636    int(4)
637    ["dyn2"]=>
638    int(5)
639    ["storage":"ArrayIterator":private]=>
640    object(ArrayObjectEx)#%d (5) {
641      ["pub1"]=>
642      int(1)
643      ["pro1":protected]=>
644      int(2)
645      ["pri1":"ArrayObjectEx":private]=>
646      int(3)
647      ["imp1"]=>
648      int(4)
649      ["dyn1"]=>
650      int(5)
651    }
652  }
653}
654array(1) {
655  ["pub1"]=>
656  int(1)
657}
658array(1) {
659  ["imp1"]=>
660  int(4)
661}
662array(1) {
663  ["dyn1"]=>
664  int(5)
665}
666===PROPERTY===
667int(1)
668bool(false)
669ArrayObjectEx::setFlags(2)
670int(1)
671bool(false)
672int(1)
673bool(false)
674ArrayIteratorEx::setFlags(2)
675int(1)
676bool(true)
677===CHECK===
678ArrayObjectEx::setFlags(1)
679ArrayObjectEx::dump()
680array(3) {
681  ["Flags"]=>
682  int(1)
683  ["OVars"]=>
684  array(5) {
685    ["pub1"]=>
686    int(1)
687    ["pro1"]=>
688    int(2)
689    ["pri1"]=>
690    int(3)
691    ["imp1"]=>
692    int(4)
693    ["dyn1"]=>
694    int(5)
695  }
696  ["$this"]=>
697  object(ArrayObjectEx)#%d (5) {
698    ["pub1"]=>
699    int(1)
700    ["pro1":protected]=>
701    int(2)
702    ["pri1":"ArrayObjectEx":private]=>
703    int(3)
704    ["imp1"]=>
705    int(4)
706    ["dyn1"]=>
707    int(5)
708  }
709}
710ArrayObjectEx::show()
711ArrayObjectEx::getIterator()
712ArrayIteratorEx::__construct()
713ArrayIteratorEx::dump()
714array(3) {
715  ["Flags"]=>
716  int(1)
717  ["OVars"]=>
718  array(5) {
719    ["pub2"]=>
720    int(1)
721    ["pro2"]=>
722    int(2)
723    ["pri2"]=>
724    int(3)
725    ["imp2"]=>
726    int(4)
727    ["dyn2"]=>
728    int(5)
729  }
730  ["$this"]=>
731  object(ArrayIteratorEx)#%d (6) {
732    ["pub2"]=>
733    int(1)
734    ["pro2":protected]=>
735    int(2)
736    ["pri2":"ArrayIteratorEx":private]=>
737    int(3)
738    ["imp2"]=>
739    int(4)
740    ["dyn2"]=>
741    int(5)
742    ["storage":"ArrayIterator":private]=>
743    object(ArrayObjectEx)#%d (5) {
744      ["pub1"]=>
745      int(1)
746      ["pro1":protected]=>
747      int(2)
748      ["pri1":"ArrayObjectEx":private]=>
749      int(3)
750      ["imp1"]=>
751      int(4)
752      ["dyn1"]=>
753      int(5)
754    }
755  }
756}
757array(1) {
758  ["pub1"]=>
759  int(1)
760}
761array(1) {
762  ["imp1"]=>
763  int(4)
764}
765array(1) {
766  ["dyn1"]=>
767  int(5)
768}
769===FOREACH===
770ArrayObjectEx::getIterator()
771ArrayIteratorEx::__construct()
772ArrayIteratorEx::dump()
773array(3) {
774  ["Flags"]=>
775  int(1)
776  ["OVars"]=>
777  array(5) {
778    ["pub2"]=>
779    int(1)
780    ["pro2"]=>
781    int(2)
782    ["pri2"]=>
783    int(3)
784    ["imp2"]=>
785    int(4)
786    ["dyn2"]=>
787    int(5)
788  }
789  ["$this"]=>
790  object(ArrayIteratorEx)#%d (6) {
791    ["pub2"]=>
792    int(1)
793    ["pro2":protected]=>
794    int(2)
795    ["pri2":"ArrayIteratorEx":private]=>
796    int(3)
797    ["imp2"]=>
798    int(4)
799    ["dyn2"]=>
800    int(5)
801    ["storage":"ArrayIterator":private]=>
802    object(ArrayObjectEx)#%d (5) {
803      ["pub1"]=>
804      int(1)
805      ["pro1":protected]=>
806      int(2)
807      ["pri1":"ArrayObjectEx":private]=>
808      int(3)
809      ["imp1"]=>
810      int(4)
811      ["dyn1"]=>
812      int(5)
813    }
814  }
815}
816array(1) {
817  ["pub1"]=>
818  int(1)
819}
820array(1) {
821  ["imp1"]=>
822  int(4)
823}
824array(1) {
825  ["dyn1"]=>
826  int(5)
827}
828===PROPERTY===
829int(1)
830bool(false)
831ArrayObjectEx::setFlags(3)
832int(1)
833bool(false)
834int(1)
835bool(false)
836ArrayIteratorEx::setFlags(3)
837int(1)
838bool(true)
839===DONE===
840