PHP系列(七)PHP错误异常处理

时间:2022-08-26 08:19:03

1、Php错误报告级别

1 E_ERROR 致命的运行错误。错误无法恢复,暂停执行脚本。

2 E_WARNING 运行时警告(非致命性错误)。非致命的运行错误,脚本执行不会停止。

4 E_PARSE 编译时解析错误。解析错误只由分析器产生。

8 E_NOTICE 运行时提醒(这些经常是你代码中的bug引起的,也可能是有意的行为造成的。)

 error_reporting = E_ALL & ~E_NOTICE

2、自定义php错误报告方式

set_error_handler("myerrorfun");

$mess ="";

function  myerrorfun($error_type,$error_message,$error_file,$error_line){

            global $mess;

            $mess.="发生错误级别为{$error_type}类型、错误消息<b>{$error_message}</b>,在文件夹{$error_file},第{$error_line}行。<br>";

}

getType($a);

echo"$mess";

显示为:发生错误级别为8类型、错误消息Undefined variable: a,在文件夹C:\AppServ\www\index.php,第9行。

 set_error_handler($_type,$_message,$_errfile,$_errline) 函数设置用户自定义的错误处理程序,然后触发错误

3、php记录错误日志

log_errors = on 开启php日志

error_log =syslog  将php日志写到系统上去。

error_log = “c:/lamp/php_error.log”;自已指定一个存放目录、与上面相斥

ini_set(“log_errors”,“on”); 在php开发文件里设置

 

try{

            echo"开始";

            run();

}catch(Exception $e){

            echo$e->getMessage()."<br>";

}

//当try{}里面不成功就抛出catch里面的异常

4、自定义异常类

//自定义异常类、必须是系统类Exception的子类

//如果继承Exception类、重写了构造方法、一定要调一下父类中被覆盖的方法/

class  MyBtException extends  Exception{

            function__construct($mess){

                       parent::__construct($mess);

            }

            functionchangBt(){

                       echo"换个备胎";

            }

}

try{

            throw  new  MyBtException("车子胞胎");

            echo"路况很好!";

}catch(MyBtException $e){

            Echo  $e->getMessage()."<br>";

            $e->changBt()."<br>";

}

5、自定义多个异常类

            //写出对应这个异常解决方法, 就是一下正常类的结构

            class MyBtException  extends  Exception{

                       function__construct($mess) {

                                   parent::__construct($mess);

                       }

                       functionchangBt() {

                                   echo"换上备胎!";

                       }

            }

            class  WcException  extends  Exception {

                       functionpro() {

                                   echo"去公厕<br>";

                       }

            }

            class  NoException  extends  Exception {

                       functionpro() {

                                   echo"买面色凑合一下!<br>";

                       }

            }

            Class  FlException  extends  Exception {

                       functionpro() {

                                   echo"走小路!<br>";

                       }

            }


class  Dm  {

            function gowc($bj) {

                       if(!$bj){

                                   throw new WcException("马桶不好用了");

                       }

                       echo"哈哈,事儿办的很成功!<br>";

            }

 

            function eat($time) {

                       if(!$time){

                                   thrownew NoException("起来晚了,早餐没了!");

                       }

                       echo"吃的很好!<br>";

            }

            function dri($dz) {

                       if(!$dz){

                                   throw new  MyBtException("爆胎了");

                       }

                       echo"车开的不错!<br>";

            }

            function run($yu) {

                       if(!$yu){

                                   throw new  FlException("天下雪了, 高速封路了");

                       }

                       echo"高速很好走!<br>";

            }

}

echo "早上起床<br>";


try{

            $dm =new  Dm();

            // 1. 上厕所  (马桶不好用了),去公厕

            $dm-> gowc(true);

            // 2. 吃早餐 (没有早点),买面包

            $dm-> eat(true);

            //3. 开车上班 (爆tai)         换下

            $dm->dri(true);

 

            //4. 上高速  (下雪)  小路

            $dm->run(false);

} catch(MyBtException  $e) {   //  Exception $e = newException('');

            echo$e->getMessage()."<br>";

            //自定义类中的解决方法调用,解决了问题

            $e->changBt()."<br>";

            try {

            }catch(Exception$e) {

            }

} catch(NoException $e) {

            echo$e->getMessage()."<br>";

            $e->pro();

} catch(WcException $e) {

            echo$e->getMessage()."<br>";

            $e->pro();

} catch(Exception $e) {

            echo$e->getMessage()."<br>";

            //$e->pro();

}

            echo"到公司开始工作<br>";

 


本文出自 “Linux狱长” 博客,请务必保留此出处http://sswqzx.blog.51cto.com/2494644/1968854