6,PHP异常
2016-11-10 本文已影响73人
陈钢镚学财
首先
PHP 异常处理.png先说说我对php异常处理的理解:
<?php
function inverse($x) {
if (!$x) {
throw new Exception('Division by zero.');
}else{
return 1/$x;
}
}
try {
echo inverse(5) . " ";
echo inverse(0) . " ";
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), " ";
}
?>
从上述的代码中,可以看出,php的异常处理,都需要依靠开发者自己进行分支判断来决定是否抛出一个异常。
(ps:我并没有从网上的资料中找到,php的异常能像java那样自动捕获并抛出。)
问题
- 既然PHP的异常基于if来判断,那在if之中,抛出异常的语句完全可以换成处理异常的流程,何必要先抛出,又捕获呢?
- 做php开发至今,参与大大小小的项目不下十个,为什么从未遇见过要使用异常机制的?
- 综上所述,php所提供的异常处理,又有什么用呢?
于是,如题,我真的不知道PHP的异常处理,有着怎样的意义,怎样的应用场景。
然而,我一再提醒自己,一切东西的存在,都是经过市场考验的,有它存在的价值。
既然资料找不到结果,那就看项目吧
public function Send() {
try {
if(!$this->PreSend()) return false;
return $this->PostSend();
} catch (phpmailerException $e) {
$this->SetError($e->getMessage());
if ($this->exceptions) {
throw $e;
}
return false;
}
}
这是从PHPmailer里面摘出来的一段。
其异常抛出的步骤,在PreSend,PostSend这两个方法中。
实际上,这两个方法之中,同样可以有自己的try...catch,形成嵌套。
那么,拿异常机制和前文所说的不抛出异常,直接处理异常的做法做一个对比吧
- 直接处理异常,逻辑代码便只能够单独写在判断异常的分支语句中
- 抛出异常,则可以将所有异常集中到catch处,根据错误码进行处理,而且不同的自定义异常类,也支持不同的错误码
- 直接处理异常在进入另一个方法时,只能通过return返回一些参数,而异常处理却可以正常地抛出错误码
- ……应该还有更多,只是我实在组织不出来了。
结语
异常处理在平时开发中或许用到的次数比较少,所以并没有那么深入人心。但是,一切经历市场考核的东西,一定会有其存在的价值。我应该坚定信念去学习,探索。
对于异常处理,我始终觉得自己了解的还不够透彻。非常欢迎大牛们可以给以斧正。