前言:
在PHP函数中,有一个处理异常的内部类-exception,我们今天来一起认识一下。
内容概要:
1、exception内部类解析
2、如何创建自己的内部类
3、自定义异常类的使用
一、exception类
我们先把这个内部类拿出来,看看它究竟是怎么实现的。
Exception {
/* 属性 */
protected string $message ;
protected int $code ;
protected string $file ;
protected int $line ;
/* 方法 */
public __construct ([ string $message = "" [, int $code = 0 [, Throwable $previous = NULL ]]] )
final public string getMessage ( void )
final public Throwable getPrevious ( void )
final public int getCode ( void )
final public string getFile ( void )
final public int getLine ( void )
final public array getTrace ( void )
final public string getTraceAsString ( void )
public string __toString ( void )
final private void __clone ( void )
}
我们一起来解析一下:
首先这个内部类在实例化的时候,可以传入两个参数,异常说明和异常编码。
同时,实例化的对象可以返回发生异常的文件地址和名称,行数,发生异常时的参数。
二、如何创建自己的异常类
自定义异常类比较简单,直接继承exception类即可。
class MyException extends Exception
{
public function errorMessage()
{
//error message
return 'MyMessage:'.$this->getMessage();
}
}
这样,我们自己的MyException类,实例化对象后,可以继承父类的属性和方法。
比如 getLine() 、 getFile() 以及 getMessage()。
日常开发中,我们还可以建立一个总的异常类MyException,并在这个异常类中定义一些友好显示的模板,让具体的异常类继承MyException,开发过程中就能比较高逼格显示异常了。
三、自定义异常类的使用
这个可以参考上一节的示例。我这里贴出来,就不废话了。
$a = 'PHP在路上';
try {
if ($a === 0) {
throw new ZeroException("Error Processing Request1", 1);
}else
{
throw new MyException("Error Processing Request2", 1);
}
echo 4/$a;
} catch (ZeroException $e) {
echo $e->getMessage();
}
catch(MyException $e) {
echo $e->getMessage();
}
class ZeroException extends Exception
{
public function errorMessage()
{
//error message
return 'Zero:'.$this->getMessage();
}
}
class MyException extends Exception
{
public function errorMessage()
{
//error message
return 'MyMessage:'.$this->getMessage();
}
}