destructor_and_exceptions.phpt 942 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. --EXPECT--
  48. FailClass::__destruct
  49. Caught: FailClass
  50. FatalException::__construct
  51. FailClass::__destruct
  52. Caught Exception: FailClass