foreachLoopIteratorAggregate.002.phpt 1.1 KB

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