zoukankan      html  css  js  c++  java
  • 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 中的错误

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

  • 相关阅读:
    程序员代码面试指南:IT名企算法与数据结构题目最优解
    经典排序算法
    Log4j输出格式控制--log4j的PatternLayout参数含义
    常用数据库4 mongodb
    常用数据库2 sqlite及SQL注入
    面试常问-数据库索引实现原理
    自定义web框架
    HTML|CSS之布局相关总结
    C++模板类练习题
    C++中的运算符重载练习题
  • 原文地址:https://www.cnblogs.com/dee0912/p/4614915.html
Copyright © 2011-2022 走看看