1--TEST-- 2IteratorAggregate::getIterator bad return type 3--FILE-- 4<?php 5 6class bad1 implements IteratorAggregate { 7 function getIterator() { 8 return null; 9 } 10} 11 12class bad2 implements IteratorAggregate { 13 function getIterator() { 14 return new stdClass; 15 } 16} 17 18class bad3 implements IteratorAggregate { 19 function getIterator() { 20 return 1; 21 } 22} 23 24class bad4 implements IteratorAggregate { 25 function getIterator() { 26 return array(1,2,3); 27 } 28} 29 30 31function f($className) { 32 try { 33 foreach (new $className as $k=>$v) { 34 echo "$k => $v\n"; 35 } 36 } catch (Exception $e) { 37 echo $e->getLine() . ": " . $e->getMessage() ."\n"; 38 } 39} 40 41f("bad1"); 42f("bad2"); 43f("bad3"); 44f("bad4"); 45 46?> 47===DONE=== 48--EXPECTF-- 4930: Objects returned by bad1::getIterator() must be traversable or implement interface Iterator 5030: Objects returned by bad2::getIterator() must be traversable or implement interface Iterator 5130: Objects returned by bad3::getIterator() must be traversable or implement interface Iterator 5230: Objects returned by bad4::getIterator() must be traversable or implement interface Iterator 53===DONE=== 54