PHP 错误与异常 笔记与总结(12 )异常

① 异常的概念;异常和错误的区别

PHP 部分借鉴了 C++ 和 JAVA 中的异常处理机制。PHP 中的异常是指 程序运行和预期不太一致,与错误是两个不同的概念

② 异常的语法结构

【例1】

 1 <?php
 2 header('content-type:text/html; charset=utf-8');
 3 /*
 4     try{
 5         要测试的代码段;
 6         throw new Exception('异常信息');
 7     }catch(Exception $e){
 8         echo $e->getMessage();
 9     }
10 */
11 //显示所有错误
12 error_reporting(-1);
13 try{
14     $num1 = 1;
15     $num2 = 2;
16     if( 2 == $num2 ){
17         //抛出异常
18         throw new Exception('0不能当作除数');
19     }else{
20         $num = $num1 / $num2;
21     }
22 }catch(Exception $e){    //捕获异常
23     echo $e->getMessage();
24 }
25 echo 'continue';

捕获异常的前提是要 手动抛出异常(throw new Exception())。

页面输出:

0不能当作除数continue

语法结构:把需要测试的代码放到 try 代码段中,然后通过 catch 来捕获异常(可以在 catch 代码段中进行操作,例如输出异常信息);在 try 代码段的 throw 语句之后的代码不会被执行。当异常抛出后,立即寻找第一个与之匹配的捕获到的异常。

【例2】在使用 PDO 异常处理类时,不需要手动抛出异常即可捕获异常,例如当数据库密码错误时,系统会自动捕获异常(使用了内置异常类):

1 <?php
2 try{
3     $pdo = new Pdo('mysql:host = localhost; dbname = test', 'root', '123');
4     var_dump($pdo);
5 }catch(PDOException $e){
6     echo $e->getMessage();
7 }
8 echo 'continue';

页面输出:

SQLSTATE[28000] [1045] Access denied for user 'root'@'localhost' (using password: YES)continue

【例3】再例如 SPL(Standard PHP Library(PHP标准库),可以参考《PHP SPL笔记》)的异常处理,同样不需要手动抛出异常(使用了内置异常类):

<?php
try{
    $splObj = new SPLFileObject('test.txt', 'r');//以“读”的方式打开test.txt(不存在)
    echo 'read file';
}catch(Exception $e){
    echo $e->getMessage();
}
echo 'continue';

页面输出:

SplFileObject::__construct(test.txt) [splfileobject.--construct]: failed to open stream: No such file or directorycontinue

③ 自定义异常类

④ 自定义异常处理器

⑤ 如何像处理异常一样处理 PHP 中的错误

⑥ 在发生错误的时候将用户重定向到另一个页面

原文地址:https://www.cnblogs.com/dee0912/p/4614915.html