Java和php中的try-catch分析

描述:对一个健壮的系统来讲,异常处理是必不可少的一部分,针对异常的管理,主要就是异常的捕获和处理操作,然而在php中使用try-catch的时候,我个人感觉没有java中的舒服,因为在php中try-catch时,你要手动throw异常才能达到你预期的异常处理效果,而java不同,你无需去手动throw异常,在try区域中,会自动捕获异常,并处理。

php:try-catch实例

    1:创建一个可抛出一个异常的函数

       function testError(){

        $s=2/0;

        throw new Exception("Value must be 1 or below");//这里必须进行手动throw异常才行

          return true;

       }

2:在 "try-catch" 代码块中捕获异常

  try {

         testError();

         echo '当一个整数除以一个0后,如没有手动throw异常的话,仍然会执行到这里。';

        }catch(Exception $e) {

          echo 'Error Message: ' .$e->getMessage();

   }

注:执行上面的测试程序后会出现下面提示:

看到上面的一些提示后,我们作为开发人员就明白了大致是什么错误导致的这个异常,但是作为一个健壮的系统来讲,这些提示是不应该显示给用户的,提供给用户看到的是一些友好的提示信息,我们真正让用户可见的就是红框中的信息(这里是测试输出的信息,可以在此做其他友好处理),除了红框中的信息,其他都是不需要显示的,我们只需要把php.ini中的display_errors = On关闭即可,即display_errors = Off。关闭后重启一下apache,再访问一下刚才的测试程序,就会只显示上面红框中的提示信息了。
这里主要验证一下php中try-catch时必须手动throw才行,验证如下:
   把异常函数中throw这一句进行注释掉,然后在运行测试一下,则会出现下面的提示:

   “当一个整数除以一个0后,如没有手动throw异常的话,仍然会执行到这里”
  这意味着当程序出现异常时,在try-catch中没有被捕获处理,反而下面的代码页照常给执行了,这不是我们想要的;我们再次把刚才注释掉的throw一句给去掉后,就可以正常的捕获处理异常了。

java:try-catch实例:    

public class TestTry{

    public static void testError(){

       int i=3,n=0;

       int s=i/n;

    }

   public static void main(String[] args){

    try{

       TestTry.testError();

       System.out.println("Goto here");

    }catch(Exceptione){

       System.out.println("ErrorMessage:"+e);

    }

   }

}

执行上面的验证程序后:Error Message:java.lang.ArithmeticException: /by zero

注:可以看出以上java验证程序中的try-catch模块没有手动去throw,而是在try区域会自动捕获处理。

下一步将深入研究一下php的异常处理机制,如何才能进行自动操作。

转载于:https://my.oschina.net/mapsh/blog/598135

猜你喜欢

转载自blog.csdn.net/weixin_34281537/article/details/91691105
今日推荐