diff --git a/language/exceptions.xml b/language/exceptions.xml
index 49ff05a27b..2dd8d85b47 100644
--- a/language/exceptions.xml
+++ b/language/exceptions.xml
@@ -125,21 +125,27 @@ string(4) "foo!"
class Exception
{
protected $message = 'Unknown exception'; // exception message
+ private $string; // __toString cache
protected $code = 0; // user defined exception code
protected $file; // source filename of exception
protected $line; // source line of exception
+ private $trace; // backtrace
+ private $previous; // previous exception if nested exception
- function __construct($message = null, $code = 0);
+ public function __construct($message = null, $code = 0, Exception $previous = null);
- final function getMessage(); // message of exception
- final function getCode(); // code of exception
- final function getFile(); // source filename
- final function getLine(); // source line
- final function getTrace(); // an array of the backtrace()
- final function getTraceAsString(); // formatted string of trace
+ final private function __clone(); // Inhibits cloning of exceptions.
+
+ final public function getMessage(); // message of exception
+ final public function getCode(); // code of exception
+ final public function getFile(); // source filename
+ final public function getLine(); // source line
+ final public function getTrace(); // an array of the backtrace()
+ final public function getPrevious(); // previous exception
+ final public function getTraceAsString(); // formatted string of trace
/* Overrideable */
- function __toString(); // formatted string for display
+ public function __toString(); // formatted string for display
}
?>
]]>
@@ -154,6 +160,13 @@ class Exception
linkend="language.oop5.magic">__toString() method can be overridden
to provide a custom output when the object is presented as a string.
+
+
+ Exceptions cannot be cloned. Attempting to clone an Exception will result in a
+ E_FATAL error.
+
+ Extending the Exception class
@@ -165,11 +178,11 @@ class Exception
class MyException extends Exception
{
// Redefine the exception so message isn't optional
- public function __construct($message, $code = 0) {
+ public function __construct($message, $code = 0, Exception $previous = null) {
// some code
// make sure everything is assigned properly
- parent::__construct($message, $code);
+ parent::__construct($message, $code, $previous);
}
// custom string representation of object
@@ -227,7 +240,7 @@ try {
}
// Continue execution
-var_dump($o);
+var_dump($o); // Null
echo "\n\n";
@@ -242,7 +255,7 @@ try {
}
// Continue execution
-var_dump($o);
+var_dump($o); // Null
echo "\n\n";
@@ -254,7 +267,7 @@ try {
}
// Continue execution
-var_dump($o);
+var_dump($o); // Null
echo "\n\n";
@@ -266,7 +279,7 @@ try {
}
// Continue execution
-var_dump($o);
+var_dump($o); // TestException
echo "\n\n";
?>
]]>