php exception异常类如何使用非数字code码?

Last modified date

Comments: 0

通常当我们自定义异常类或者使用内置异常类时在抛出异常时如果使用的code码是字符型的会抛出一个致命错误,错误内容如下:

throw new My_Exception('Use this example for not numeric codes', 'T1');

Fatal error: Uncaught Error: Wrong parameters for My_Exception([string $message [, long $code [, Throwable $previous = NULL]]])

那么有些特殊场景需要字符型的code码时,可以参考下边的案例:

class My_Exception extends Exception
{
    public function __construct($message = "", $code = 0, Throwable $previous = null)
    {
        //注意这里进行了code码的强制数字转换,但是getCode使用的还是原始的 $this->code 的值
        parent::__construct($message, (int)$code, $previous);
        $this->code = $code;
    }
}

function getCode($a = ''){
    if ($a == 0) {
        throw new My_Exception('Use this example for not numeric codes', 'T1');
    }
    return $a;
}

try {
    getCode();
} catch (My_Exception $exception) {
    echo $exception->getCode()."\n";
    echo $exception->getMessage()."\n";
}

官方bug地址:http://bugs.php.net/39615

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Post comment