foreachLoopIteratorAggregate.002.phpt 1.2 KB

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