在php中本来是没有异常概念的,后来为了向企业级开发进军,就向java和其他语言借鉴了异常机制
但与java异常不一致的是,java中的代码出现错误就会以异常的方式抛出错误,可以认为异常就是解决代码中错误的一种方式,而PHP的处理方式则不一样,主要区别在两点
由于上面的历史问题,导致PHP的异常处理是不足的,绝大多数情况下,无法自动抛出异常,必须使用if...else对代码进行判断,然后针对不符合预期的代码手动抛出异常(如除数为0的例子)
PHP中,使用异常的基本语法是try...catch,这与其他大多语言都是一样的,基本语法结果如下
try{ //抛出异常 throw new Exception("异常信息"); //异常后面的代码不会执行 }catch(Exception $e){ //捕获异常之后的处理代码 echo $e->getMessage(); }
在PHP中,与java不一样,java会将很多的错误都当作异常,并利用内置的异常处理类,抛出异常并处理。
PHP则不会主动抛出异常(某些内置异常处理类的初外),需要开发者手动使用throw 抛出,否则,程序出现异常,也不会被抛出,如
$num = 10; try { $res = $num / 0; } catch (Exception $e) { echo $e->getMessage(); }
上面代码运行结果如下
Warning: Division by zero in D:/phpStudy/WWW/test/11.php on line 12
只是在页面中显示错误信息,而没有执行catch中的代码
将上面代码修改如下,才可以抛出异常并捕获
$num1 = 10; $num2 = 0; try { if ($num2 == 0) { throw new Exception('除数不能为0'); } else { echo $num1 / $num2; } } catch (Exception $e) { echo $e->getMessage(); }
运行结果如下
除数不能为0
另外要注意,throw 后面的代码不会执行
总结:
在PHP中,与java不一样,PHP不会主动抛出异常(除非内置异常处理类),需要使用throw 抛出,然后使用catch捕获