1--TEST-- 2SPL: ArrayObject::getIteratorClass and ArrayObject::setIteratorClass basic functionality 3--FILE-- 4<?php 5class MyIterator extends ArrayIterator { 6 7 function __construct() { 8 $args = func_get_args(); 9 echo " In " . __METHOD__ . "(" . implode(',', $args) . ")\n"; 10 } 11 12 function rewind(): void { 13 $args = func_get_args(); 14 echo " In " . __METHOD__ . "(" . implode(',', $args) . ")\n"; 15 parent::rewind(); 16 } 17 18 function valid(): bool { 19 $args = func_get_args(); 20 echo " In " . __METHOD__ . "(" . implode(',', $args) . ")\n"; 21 return parent::valid(); 22 } 23 24 function current(): mixed { 25 $args = func_get_args(); 26 echo " In " . __METHOD__ . "(" . implode(',', $args) . ")\n"; 27 return parent::current(); 28 } 29 30 function next(): void { 31 $args = func_get_args(); 32 echo " In " . __METHOD__ . "(" . implode(',', $args) . ")\n"; 33 parent::next(); 34 } 35 36 function key(): string|int|null { 37 $args = func_get_args(); 38 echo " In " . __METHOD__ . "(" . implode(',', $args) . ")\n"; 39 return parent::key(); 40 } 41} 42 43$ao = new ArrayObject(array('a'=>1,'b'=>2,'c'=>3), 0, "MyIterator"); 44 45echo "--> Access using MyIterator:\n"; 46var_dump($ao->getIteratorClass()); 47var_dump($ao->getIterator()); 48foreach($ao as $key=>$value) { 49 echo " $key=>$value\n"; 50} 51 52echo "\n\n--> Access using ArrayIterator:\n"; 53var_dump($ao->setIteratorClass("ArrayIterator")); 54var_dump($ao->getIteratorClass()); 55var_dump($ao->getIterator()); 56foreach($ao as $key=>$value) { 57 echo "$key=>$value\n"; 58} 59 60?> 61--EXPECT-- 62--> Access using MyIterator: 63string(10) "MyIterator" 64object(MyIterator)#2 (1) { 65 ["storage":"ArrayIterator":private]=> 66 object(ArrayObject)#1 (1) { 67 ["storage":"ArrayObject":private]=> 68 array(3) { 69 ["a"]=> 70 int(1) 71 ["b"]=> 72 int(2) 73 ["c"]=> 74 int(3) 75 } 76 } 77} 78 In MyIterator::rewind() 79 In MyIterator::valid() 80 In MyIterator::current() 81 In MyIterator::key() 82 a=>1 83 In MyIterator::next() 84 In MyIterator::valid() 85 In MyIterator::current() 86 In MyIterator::key() 87 b=>2 88 In MyIterator::next() 89 In MyIterator::valid() 90 In MyIterator::current() 91 In MyIterator::key() 92 c=>3 93 In MyIterator::next() 94 In MyIterator::valid() 95 96 97--> Access using ArrayIterator: 98NULL 99string(13) "ArrayIterator" 100object(ArrayIterator)#3 (1) { 101 ["storage":"ArrayIterator":private]=> 102 object(ArrayObject)#1 (1) { 103 ["storage":"ArrayObject":private]=> 104 array(3) { 105 ["a"]=> 106 int(1) 107 ["b"]=> 108 int(2) 109 ["c"]=> 110 int(3) 111 } 112 } 113} 114a=>1 115b=>2 116c=>3 117