回复 2010 年 5 月 15 日 07:45 来自:samuelelliot+php dot net at gmail dot com 的留言
由于最基本的 Exception 类接受三个参数,而之前的异常不是第一个,...
由于继承的类不会隐式调用父构造函数,...
我建议将他的构造函数更改为以下内容
public function __construct(string $message = "", int $code = 0, PDOException $e = null)
{
// 以防他们调用:new MyException($somePDOException);
// 而不是遵循接口。
//
if (is_subclass_of($message, PDOException))
{
$e = $message;
$code = $e->getCode();
$message = $e->getMessage();
}
// 让 PDOException 做它通常做的事情
//
parent::__construct($message, $code, $e);
// 现在要纠正代码编号。
//
$state = $this->getMessage();
if(!strstr($state, 'SQLSTATE['))
$state = $this->getCode();
if(strstr($state, 'SQLSTATE['))
{
preg_match('/SQLSTATE\[(\w+)\] \[(\w+)\] (.*)/', $state, $matches);
$this->code = ($matches[1] == 'HT000' ? $matches[2] : $matches[1]);
$this->message = $matches[3];
}
}