php自定义异常类

2020/04/30 posted in  脚本
Tags:  #php

工作中会经常用到异常的调试
所以会用到异常类

<?php
Exception implements Throwable {
/* Properties */
protected string $message ;
protected int $code ;
protected string $file ;
protected int $line ;
/* Methods */
public __construct ([ string $message = "" [, int $code = 0 [, Throwable $previous = NULL ]]] )
final public getMessage ( void ) : string
final public getPrevious ( void ) : Throwable
final public getCode ( void ) : mixed
final public getFile ( void ) : string
final public getLine ( void ) : int
final public getTrace ( void ) : array
final public getTraceAsString ( void ) : string
public __toString ( void ) : string
final private __clone ( void ) : void
}

结合实际我们会自定义一些异常类来处理特定的事情

自定义异常类的编写

Class dbException extends \Exception
{
    private $errorCode;
    private $sql;

    /**
     * 初始化异常
     */
    public function __construct($code = "", $message = "",  $sql = "")
    {
        parent::__construct($message, 0);
        $this->errorCode = $code;
        $this->sql = $sql;
    }

    /**
     *  获取错误码
     */
    public function getErrorCode()
    {
        return $this->errorCode;
    }

    /**
     * 获取错误的sql语句
     */
    public function getSql():string
    {
        return $this->sql;
    }
    
    /**
     * 格式化输出异常码,异常信息,请求id
     * @return string
     */
    public function __toString()
    {
        return "[".__CLASS__."]"." code:".$this->errorCode.
            " message:".$this->getMessage().
            " sql:".$this->sql;
    }

}

我们简单测试一下自定义的异常类

运行一下我们只走到了Exception,但我们不是没结果的时候拋出dbException么?
其实是没走到throw new dbException,语句已经有错,直接底层拋出Exception

改写一下函数

这样就捕获到异常了

结论

提高效率,写好异常类是很有必要的!