资讯专栏INFORMATION COLUMN

PHP错误与异常处理

mumumu / 3287人阅读

一、PHP错误处理

1.语法错误
2.运行时错误
3.逻辑错误:不提示错误,但功能不对,最麻烦
4.三种级别:notice/warning/fatal error(无法继续执行)
5.错误报告显示:

a.可以在php.ini中修改error_reporting项目,以限定错误报告类型,如:error_reporting=E_ALL & ~E_NOTICE
b.只修改某个脚本内的错误显示,可以使用error_reporting(E_ALL & ~E_NOTICE);(推荐)

6.自定义错误报告:set_error_handler()可以传入用以显示错误的预定参数,如下:

    set_error_handler("reportError");
    $mess="";
    function reportError($error_type,$error_message,$error_file,$error_line){
        global $mess;
        $mess.="发生错误级别为{$error_type}类型,错位信息{$error_message},在文件{$error_file}中,第{$error_line}行。
"; } getType($a); echo "1111111
"; getType(); echo "2222
"; echo $mess; /*发生错误级别为8类型,错位信息Undefined variable: a,在文件F:projectsFrameFrameTestBackEnd egularExpression.php中,第24行。 发生错误级别为2类型,错位信息gettype() expects exactly 1 parameter, 0 given,在文件F:projectsFrameFrameTestBackEnd egularExpression.php中,第26行。*/

7.记录错误日志

a.将PHP.ini中display_errors设置为Off,log_errors设置为On
b.自定义日志目录error_log="C:/XX/XX/php_error.log"

c.也可以使用ini_set("display_errors","Off")或ini_get在脚本内部进行设定

二、PHP异常处理

1.try catch一体的,中间不能有任何代码
2.Exception是系统预定义的类
3.如果有异常对象抛出,就将异常对象给catch中的类
4.try中发生异常位置后的代码不再继续执行,而是直接转到catch中执行

    try{
        echo "开车上班
"; throw new Exception("车子爆胎了!"); }catch(Exception $e){//相当于Exception $e = new Exception(""); echo $e->getMessage()."
"; echo "换上备胎,继续上班
"; }

5.异常处理可以配合错误处理一起使用

    set_error_handler("reportError");
    function reportError($error_type,$error_message,$error_file,$error_line){
        if($error_type==E_WARNING){
            throw new Exception("错误信息:{$error_message},错误文件:{$error_file},错误行数{$error_line}");
        }
    }
    function drive($a){
        echo $a;
    }
    try{
        echo "开车上班
"; drive();//忘记传参,触发自定义错误函数中警告性错误,抛出异常 }catch(Exception $e){//相当于Exception $e = new Exception(""); echo $e->getMessage()."
"; echo "换上备胎,继续上班
"; }

6.自定义异常类

a.Exception类是所有异常的基类,没有定义具体异常的处理方法(只有些获取提示的方法)
b.自定义的异常类必须是系统类的子类
c.如果继续了Exception类,重写了构造方法,不要忘记调用父类构造方法进行初始化
    class BTException extends Exception {
        function __construct($message){
            parent::__construct($message);
        }
        function method(){
            return "打开后备箱,拿出工具,换备胎";
        }
    }
    try{
        echo "开车上班
"; throw new BTException("车子爆胎了!"); }catch(BTException $e){//相当于Exception $e = new Exception(""); echo $e->getMessage()."
"; echo $e->method()."
"; echo "换上备胎,继续上班
"; }

7.捕获多个异常,注:catch中还可嵌套try,即:在修正异常时还可能发生其他异常

    class Err1 extends Exception {
        function __construct($message){
            parent::__construct($message);
        }
        function method(){
            return "纠正异常1";
        }
    }
    class Err2 extends Exception {
        function __construct($message){
            parent::__construct($message);
        }
        function method(){
            return "纠正异常2";
        }
    }
    class Err3 extends Exception {
        function __construct($message){
            parent::__construct($message);
        }
        function method(){
            return "纠正异常3";
        }
    }
    $rand=rand(1,3);
    try{
        switch($rand){
            case 1:
                throw new Err1("发生异常1");
            case 2:
                throw new Err2("发生异常2");    
            case 3:
                throw new Err3("发生异常3");    
        }
    }catch(Err1 $e){
        echo $e->getMessage()."
"; echo $e->method()."
"; }catch(Err2 $e){ echo $e->getMessage()."
"; echo $e->method()."
"; }catch(Err3 $e){ echo $e->getMessage()."
"; echo $e->method()."
"; }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25664.html

相关文章

  • PHP 错误异常

    摘要:但异常捕获后程序可以继续执行,而真正的错误出现后程序就必须终止异常可以使用来捕获捕获,捕获之后后续代码可以继续执行而错误是无法使用捕获的如果抛出了异常,就必须捕获它否则程序终止执行。 PHP错误级别 Parse error > Fatal Error > Waning > Notice > Deprecated Deprecated 最低级别的错误(不推荐,不建议)使用一些过期函数的...

    longmon 评论0 收藏0
  • 浅析php中的异常错误

    摘要:异常与错误异常是指程序运行中不符合预期情况以及与正常流程不同的状况。在中主要的错误等级如下最低级别的错误,表示不推荐不建议。小结中错误和异常是两个不同的概念,这种设计根本上导致了的异常和错误与其它语言相异。中,异常时错误唯一的报告方式。 异常与错误 异常是指程序运行中不符合预期情况以及与正常流程不同的状况。错误则属于自身问题,是一种非法语法或者环境问题导致的、让编译器无法通过检查设置无...

    Leck1e 评论0 收藏0
  • PHP7新特性小结

    摘要:标量类型声明在中,引入了一个新的特性,即标量类型声明。弃用样式构造函数是与它们定义的类具有相同名称的方法,现在已被弃用,并且将来将被删除。 showImg(https://segmentfault.com/img/remote/1460000012438557?w=1024&h=456); 说明 PHP 7使用新的Zend Engine 3.0将应用程序性能提高近两倍,内存消耗比PHP...

    Steven 评论0 收藏0
  • PHP框架中的日志系统

    摘要:一的几个函数异常捕获自定义处理函数注册错误捕获自定义处理函数注册程序执行时异常终止错误捕获处理函数注册这三个函数在错误处理控制中给开发者提供了很大的自主空间,在日志系统中记录日志信息有他们的功劳。下面要说的类库是借鉴了日志系统的设计。 引言 接触过php框架的朋友们可能都知道,日志在项目中的重要作用了,他可以帮助我们定位错误的位置,让程序更友好(处理得当的话不会直接抛出一大堆只有程...

    ningwang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<