PHP异常的构造函数有第三个参数,documentation表示:
$previous: The previous exception used for the exception chaining.
但我不能让它发挥作用。我的代码如下所示:
try
{
throw new Exception('Exception 1', 1001);
}
catch (Exception $ex)
{
throw new Exception('Exception 2', 1002, $ex);
}
我希望抛出异常2,我希望它会附加异常1。但我得到的只是:
Fatal error: Wrong parameters for Exception([string $exception [, long $code ]]) in ...
我做错了什么?
答案 0 :(得分:21)
第三个参数需要5.3.0版本。
答案 1 :(得分:2)
在5.3之前,您可以创建自己的自定义异常类。我还建议这样做,我的意思是如果我catch (Exception $e)
,那么我的代码必须处理所有异常,而不仅仅是我想要的,代码会更好地解释它。
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
}
答案 2 :(得分:1)
我明白了:
Uncaught exception 'Exception' with message 'Exception 1' ...
Next exception 'Exception' with message 'Exception 2' in ...
你使用php> 5.3?