首页 > 编程笔记 > PHP笔记 阅读:13

PHP try catch语句的用法(非常详细,附带实例)

异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程。当异常被触发时,通常会发生以下动作:
当异常被抛出时,其后的代码不会继续执行,PHP 会尝试查找匹配的 catch 代码块。如果异常没有被捕获,而且又没有使用 set_exception_handler() 做相应的处理,就会发生一个严重的错误,并且输出 Uncaught Exception(未捕获异常)的错误消息。

下面的实例抛出一个异常,同时不去捕获它。
<?php
// 创建带有异常的函数
function checkNum($number) {
    if($number > 1) {
        throw new Exception("Value must be 1 or below");
    }
    return true;
}
// 抛出异常
checkNum(2);
?>
运行后结果如下图所示。由于没有捕获异常,因此出现了下面的错误提示消息。


图 1 没有捕获异常

如果想避免出现上面的错误,需要创建适当的代码来处理异常。处理异常的程序应当包括如下几个部分:
【实例】try catch 代码块的用法。
<?php
// 创建可抛出一个异常的函数
function checkNum($number) {
    if($number > 1) {
        throw new Exception("数值必须小于或等于 1");
    }
    return true;
}

// 在 try 代码块中触发异常
try {
    checkNum(2);
    // 如果没有异常,则会显示以下信息
    echo '没有任何异常';
}
// 捕获异常
catch(Exception $e) {
    echo '异常信息:' . $e->getMessage();
}
?>
分析程序:
运行后结果为:

异常信息:数值必须小于或等于 1

由于抛出异常后捕获了异常,因此出现了下面的提示消息。

处理多个异常

用户可以使用多个 if…else 代码块,或一个 switch 代码块,或者嵌套多个异常。这些异常能够使用不同的 exception 类,并返回不同的错误消息。

例如:
<?php
class customException extends Exception{
    public function errorMessage(){
        // 定义错误信息
        $errorMsg = '错误消息的行:'.$this->getLine().' in '.$this->getFile().':'.$this->getMessage().' 不是一个有效的邮箱地址';
        return $errorMsg;
    }
}

$email = "someone@yahoo.com";
try{
    // 检查是否符合条件
    if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
    {
        // 如果邮箱地址无效,则抛出异常
        throw new customException($email);
    }
    // 检查邮箱是否是雅虎邮箱
    if(strpos($email, "yahoo") !== FALSE){
        throw new Exception("$email 是一个雅虎邮箱");
    }
}
catch(customException $e) {
    echo $e->errorMessage();
}
catch(Exception $e) {
    echo $e->getMessage();
}
?>
上面的代码测试了两种条件,如果任一条件不成立,则抛出一个异常。分析一下程序的执行过程:
运行后结果如图所示:

someone@yahoo.com 是一个雅虎邮箱

相关文章