From 607639bdac48700eefea5c4a8c05940e9bf90c5a Mon Sep 17 00:00:00 2001
From: Richard Quadling <rquadling@php.net>
Date: Tue, 1 Sep 2009 10:20:56 +0000
Subject: [PATCH] Missing properties and methods of the built-in Exception
 class and note regarding the inability to clone an Exception. Fixes bug
 #49402

git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@287937 c90b9560-bf6c-de11-be94-00142212c4b1
---
 language/exceptions.xml | 41 +++++++++++++++++++++++++++--------------
 1 file changed, 27 insertions(+), 14 deletions(-)

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()</link> method can be overridden
     to provide a custom output when the object is presented as a string.
    </para>
+   <note>
+    <para>
+     Exceptions cannot be cloned. Attempting to <link
+     linkend="language.oop5.cloning">clone</link> an Exception will result in a
+     <literal>E_FATAL</literal> error.
+    </para>
+   </note>
    <example>
     <title>Extending the Exception class</title>
     <programlisting role="php">
@@ -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";
 ?>
 ]]>