destructor_and_exceptions.phpt 884 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. --TEST--
  2. ZE2 catch exception thrown in destructor
  3. --FILE--
  4. <?php
  5. class FailClass
  6. {
  7. public $fatal;
  8. function __destruct()
  9. {
  10. echo __METHOD__ . "\n";
  11. throw new exception("FailClass");
  12. echo "Done: " . __METHOD__ . "\n";
  13. }
  14. }
  15. try
  16. {
  17. $a = new FailClass;
  18. unset($a);
  19. }
  20. catch(Exception $e)
  21. {
  22. echo "Caught: " . $e->getMessage() . "\n";
  23. }
  24. class FatalException extends Exception
  25. {
  26. function __construct($what)
  27. {
  28. echo __METHOD__ . "\n";
  29. $o = new FailClass;
  30. unset($o);
  31. echo "Done: " . __METHOD__ . "\n";
  32. }
  33. }
  34. try
  35. {
  36. throw new FatalException("Damn");
  37. }
  38. catch(Exception $e)
  39. {
  40. echo "Caught Exception: " . $e->getMessage() . "\n";
  41. }
  42. catch(FatalException $e)
  43. {
  44. echo "Caught FatalException: " . $e->getMessage() . "\n";
  45. }
  46. ?>
  47. ===DONE===
  48. --EXPECTF--
  49. FailClass::__destruct
  50. Caught: FailClass
  51. FatalException::__construct
  52. FailClass::__destruct
  53. Caught Exception: FailClass
  54. ===DONE===