exception_delayed_message.phpt 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. --TEST--
  2. Exception with delayed message computation
  3. --FILE--
  4. <?php
  5. class MyException extends Exception {
  6. public $message;
  7. public $messageCallback;
  8. public function __construct() {
  9. $this->messageCallback = static function() {
  10. return "Foobar";
  11. };
  12. $this->message = new class($this->message, $this->messageCallback) {
  13. private $message;
  14. private $messageCallback;
  15. public function __construct(&$message, &$messageCallback)
  16. {
  17. $this->message = &$message;
  18. $this->messageCallback = &$messageCallback;
  19. }
  20. public function __toString(): string
  21. {
  22. $messageCallback = $this->messageCallback;
  23. $this->messageCallback = null;
  24. return $this->message = $messageCallback();
  25. }
  26. };
  27. }
  28. }
  29. throw new MyException;
  30. ?>
  31. --EXPECTF--
  32. Fatal error: Uncaught MyException: Foobar in %s:%d
  33. Stack trace:
  34. #0 {main}
  35. thrown in %s on line %d