PHP错误和异常

目录php

  • 错误和异常概念
  • 异常
    • 异常类
    • 抛出
    • 捕捉
    • 使用原则
    • 全局设置
  • 错误

错误和异常

程序免不了出错html

以前呢php是报错,你能够设置报错级别,设置错误处理函数编程

如今呢,沿着oop的思路,用异常来替代错误,异常是比错误更加科学和强大的一种处理代码运行错误的一种机制,咱们应该用异常。bash

可是呢,错误并无彻底消失匿迹,咱们本身写的代码当然能够用异常,php也在过渡到异常,可是一些老的函数运行出错仍是会有报错,大概就是这样的状况。app

异常

异常是随着oop编程而出现的,很是适合oop编程里使用,看代码函数

<?php
class Dog{
    function eat($food){
        if(!is_string($food)){
            throw new \Exception('argument must be a string',100);
        }
        if($food == 'meat'){
            return 'i am happy';
        }else{
            return 'i dont like it';
        }
    }
}

try{
    $dog = new Dog();
    $dog->eat(['shit']);
}catch(\Exception $e){
    echo $e->getMessage();
}finally{
    echo 'we got a exception';
}
//结果是'argument must be a string'
复制代码

异常的使用步骤有 1.抛出异常 2.try catch 捕捉异常和处理异常oop

抛出异常

抛出异常是一个神奇的操做,用throw,会被外层的catch捕捉。 抛出异常后,代码就不执行下去了。ui

捕捉异常

try代码块内有抛出异常的话,就会运行catch代码块。spa

异常类

Exception类是一个预约义类,抛出异常必须是Exception的实例,接受3个参数,Exception类有好几个方法,经常使用的有getMessage()和getCode().net

异常机制的使用

单一职责的类,将超出处理范围的错误抛出

在面向对象编程中,一个类每每专一于一个功能,当出现这个类处理不了的错误时,咱们要自觉选择抛出异常,交给上级去处理

调用类时,要设置try catch

咱们在调用没底的类进行使用时,要注意放进try代码块,来作好错误处理

扩展Exception

咱们还能够继承Exception编写本身的异常子类,来抛出本身的异常类,catch能够写好几个,这样能够经过类名就知道是什么类型的错误,更加细致得处理不一样的异常

finally

在catch后面接finally,finally里面的代码怎样都会运行一遍

全局异常处理

咱们不可能把全部的代码都放在try代码块,万一有漏网之鱼的异常,就惨了,怎么办? 咱们能够设置一个全局的处理函数做为后备,当没有代码能catch异常时,交给这个函数处理。

这个设置方法就是这样

set_exception_handler(function(\Exception $e){
    echo 'haha,sth is wrong,but i wont tell you the detail,you can go and check log file';
});
throw new \Exception();
复制代码

错误

错误时彻底不同的机制,他没有太细致的处理选项,比异常有多一个预约的错误等级。

全局错误处理程序

跟异常同样,咱们也能够设置一个函数用于处理全部没有被处理的错误。

set_error_handler(function($errno,$errstr,$errfile,$errline){
    echo 'haha,sth is wrong,but i wont tell you the detail,you can go and check log file';
});
trigger_error();
复制代码

咱们能够巧妙得把错误转发成一个异常,这样并入异常处理机制统一处理

set_error_handler(function($errno,$errstr,$errfile,$errline){
    throw new \Exception($errstr,$errno); 
});
trigger_error();
复制代码

参考文章

相关文章
相关标签/搜索