2010-04-09 8 views
11

Constructor para la excepción de PHP tiene tercer parámetro, documentation dice:Cómo implementar el encadenamiento de excepción en PHP

$previous: The previous exception used for the exception chaining. 

pero no puedo hacer que funcione. Mi código es el siguiente:

try 
{ 
    throw new Exception('Exception 1', 1001); 
} 
catch (Exception $ex) 
{ 
    throw new Exception('Exception 2', 1002, $ex); 
} 

espero Excepción 2 a ser lanzado y espero que tendrá Excepción 1 adjunta. Pero todo lo que obtengo es:

Fatal error: Wrong parameters for Exception([string $exception [, long $code ]]) in ... 

¿Qué estoy haciendo mal?

+2

¿Cuál es su versión de PHP? – EFraim

Respuesta

20

El tercer parámetro requiere la versión 5.3.0.

1

me sale:

Uncaught exception 'Exception' with message 'Exception 1' ... 

Next exception 'Exception' with message 'Exception 2' in ... 

Usted utilizando php> 5.3?

1

Antes de 5.3 puede crear su propia clase de excepción personalizada. También se recomienda hacer esto, quiero decir, si yo catch (Exception $e) mi código debe manejar todas las excepciones en lugar de solo la que yo quiero, el código lo explica mejor.


    class MyException extends Exception 
    { 
    protected $PreviousException; 

    public function __construct($message, $code = null, $previousException = null) 
    { 
     parent::__construct($message, $code); 
     $this->PreviousException = $previousException; 
    } 
    } 

    class IOException extends MyException { } 

    try 
    { 
    $fh = @fopen("bash.txt", "w"); 
    if ($fh === false) 
     throw new IOException('File open failed for file `bash.txt`'); 
    } 
    catch (IOException $e) 
    { 
    // Only responsible for I/O related errors 
    } 
Cuestiones relacionadas