旗下导航:搜·么
当前位置:网站首页 > PHP问题 > 正文

php中错误信息和非常信息区分【php题目】

作者:搜搜PHP网发布时间:2019-11-26分类:PHP问题浏览:110


导读:PHP中什么是非常:顺序在运转中涌现不符合预期的状况,许可发作(你也不想让他涌现不一般的状况)但他是一种不一般的状况,根据我们的一般逻辑本不应出的毛病,但仍然会涌现的毛...

PHP中什么是非常:

顺序在运转中涌现不符合预期的状况,许可发作(你也不想让他涌现不一般的状况)但他是一种不一般的状况,根据我们的一般逻辑本不应出的毛病,但仍然会涌现的毛病,属于逻辑和业务流程的毛病,而不是编译或许语法上的毛病。

PHP中什么是毛病:(引荐进修:PHP编程从入门到通晓)

属于php剧本本身的题目,大部分状况是由毛病的语法,服务器环境致使,使得编译器没法经由过程搜检,以至没法运转的状况。warning、notice都是毛病,只是他们的级别差别罢了,而且毛病是不能被try-catch捕捉的。

上面的说法是有前提条件的:

在PHP中,由于在其他言语中就不能如许下结论了,也就是说非常和毛病的说法在差别的言语有差别的说法。

在PHP中任何本身的毛病或许是非一般的代码都邑当作毛病看待,并不会以非常的情势抛出,然则也有一些状况会当作非常和毛病同时抛出(据说是,我没有找到适宜的例子)。

也就是说,你想在数据库衔接失利的时刻自动捕捉非常是行不通的,由于这就不是非常,是毛病。然则在java中就不一样了,他会把许多和预期不一致的行动当作非常来举行捕捉。

PHP非常处置惩罚很鸡肋?

在上面的剖析中我们能够看出,PHP并不能主动的抛出非常,然则你能够手动抛出非常,这就很无语了,假如你晓得那里会出题目,你增加if else处理不就行了吗,为啥还要手动抛出非常,既然能手动抛出就证实这个不是非常,而是意料之中。

以我的明白,这就是PHP非常处置惩罚鸡肋的处所(不一定对啊)。所以PHP的非常机制不是那末的圆满,然则使用过框架的同砚都晓得有这个状况:你在框架中直接写开首那段php“自动”捕捉非常的代码是能够的,这是为何?

看过源码的同砚都晓得框架中都邑触及三个函数:register_shutdown_function,set_error_handler,set_exception_handler三个黑科技,经由过程这几个函数我们能够完成PHP假自动捕捉非常和毛病。

把毛病以非常的情势抛出(不能完整抛出)

由上面的解说我们晓得,php中的毛病是不能以非常的像是捕捉的,然则我们需要让他们抛出,已达到扩大 try-catch的影响局限,我们前面讲到过set_error_handler() 要领,他是干吗用的,他是捕捉毛病的,所以我们就能够借助他来吧毛病捕捉,然后再以非常的情势抛出,ok,尝尝下面的写法:

<?php
    set_error_handler('error');
    function error($type, $message, $file, $line)
    {
        throw new \Exception($message . '毛病当作非常');
    }

    $num = 0;
    try {
        echo 1/$num;

    } catch (Exception $e){
        echo $e->getMessage();
    }
?>

在php中最好不要简朴的在能够失足的处所直接抛出非常,在一些框架中,重写了上述的要领,非常和毛病能够一般抛出

以上就是php中毛病信息和非常信息区分的细致内容,更多请关注ki4网别的相干文章!

标签:php