php为什么不能像java一样使用try catch解决异常问题

在一些面向对像的编程语言当中,使用try catch语句可以很好的捕获异常。为什么php中却很多时候捕获不了“异常”?原因其实是PHP遇到任何自身错误都会触发一个错误,而不是抛出异常(也可能同时抛出)。如果想使用异常处理不可预料的问题是不行的。也就是说,你用try catch包裹着的代码有可能抛出的是一个错误是Error,而不是一个Exception,所以try也是白try!

之前有一个从C#转php的同事看到了代码当中有很多throw,他很不解为什么要手动抛出异常。PHP只有你主动throw后,才能捕获异常(也有一些异常是可以自动捕获)。

异常处理机制可以把每一件事情当作事务考虑,还可以把异常看成一种内建的恢复系统。如果程序某部分失败,异常将恢复到某个已知的稳定的点上;

例如:针对一个除零问题,java属于ArithmeticException,会对其实施抓捕,而PHP则不会;java里异常是唯一的错误报告方式; 在php中将多个相关关联不可拆分的操作封闭在一个try catch块当中可以减小数据不一致的问题,可以在catch语句块当中,做一些补救措施:

<br />try {
    if(文件不传不成功) throw(上传异常);
    if(入库失败) throw (db操作异常);
}catch (异常){
    //补救...删队文件或者删除记录等
}
0

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据