1. 异常是什么?
异常是程序运行中发生的错误或意外情况的表示。在PHP中,异常用Exception类表示。
1.1 异常的分类
在PHP中,异常分为两种类型:内置异常和自定义异常。
内置异常是PHP本身提供的异常类型,例如:InvalidArgumentException、RuntimeException等。
自定义异常指的是程序员根据自己的需求,继承Exception类并添加额外的方法或属性,用于处理特定的异常情况。
2. 异常处理
异常处理是指程序中对异常的响应和处理方式。在PHP中,异常处理可以通过try catch语句来实现。
2.1 try catch语句
try catch语句用于捕获可能会抛出异常的代码块中的异常。代码块中的代码在异常发生时会被立即中断,并将控制流转交给catch块中的代码。如果没有发生异常,则不会执行catch块中的代码。
下面是try catch语句的基本语法:
try {
//可能会抛出异常的代码块
} catch (Exception $e) {
//处理异常的代码块
}
在上面的例子中,try块中的代码可能会抛出一个Exception类的实例。如果发生异常,控制流将立即转移给catch块中的代码。$e是捕获到的异常对象,可以通过$e->getMessage()方法获取异常的消息内容。
2.2 try catch finally语句
try catch finally语句是try catch语句的扩展。finally块中的代码无论try块中是否发生异常都会执行。通常情况下,finally块主要用于清理操作,例如释放资源等。
下面是try catch finally语句的基本语法:
try {
//可能会抛出异常的代码块
} catch (Exception $e) {
//处理异常的代码块
} finally {
//必然会执行的代码块
}
3. 自定义异常
在PHP中,通过继承Exception类可以创建自定义异常。这些自定义异常可以帮助开发人员更好地处理程序中的异常情况。
下面是一个简单的自定义异常的例子:
class MyException extends Exception {
public function errorMessage(){
//自定义错误消息
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': '.$this->getMessage().' is not a valid E-Mail address';
return $errorMsg;
}
}
$email = "someone@example...com";
try {
//检查电子邮件地址是否有效
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) {
//如果电子邮件地址无效,则抛出自定义异常
throw new MyException($email);
}
} catch (MyException $e) {
//处理异常
echo $e->errorMessage();
}
在上面的例子中,如果电子邮件地址无效,则会抛出MyException类的实例。通过调用$e->errorMessage()方法可以获取自定义错误消息。