try_finally_020.phpt 776 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. --TEST--
  2. Combination of foreach, finally and exception (call order)
  3. --FILE--
  4. <?php
  5. class A {
  6. public $n = 0;
  7. function __construct($n) {
  8. $this->n = $n;
  9. }
  10. function __destruct() {
  11. echo "destruct" . $this->n . "\n";
  12. }
  13. }
  14. foreach ([new A(1)] as $a) {
  15. $a = null;
  16. try {
  17. foreach ([new A(2)] as $a) {
  18. $a = null;
  19. try {
  20. foreach ([new A(3)] as $a) {
  21. $a = null;
  22. throw new Exception();
  23. }
  24. } finally {
  25. echo "finally1\n";
  26. }
  27. }
  28. } catch (Exception $e) {
  29. echo "catch\n";
  30. } finally {
  31. echo "finally2\n";
  32. }
  33. }
  34. ?>
  35. --EXPECT--
  36. destruct3
  37. finally1
  38. destruct2
  39. catch
  40. finally2
  41. destruct1