描述:对一个健壮的系统来讲,异常处理是必不可少的一部分,针对异常的管理,主要就是异常的捕获和处理操作,然而在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

最新文章

  1. jQuery插件编写及链式编程模型小结
  2. 实例演示Android异步加载图片(转)
  3. LightOJ 1236 - Pairs Forming LCM(素因子分解)
  4. CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
  5. redis配置认证密码
  6. js 比较两个日期的大小的例子
  7. FastScroll(1)ListView打开FastScroll及自定义它的样式
  8. php工厂设计模式
  9. hdu2629Identity Card
  10. iOS制作毛玻璃效果
  11. C#之lambda表达式
  12. iOS架构设计-URL缓存
  13. [2012-06-29]sed根据行号范围执行替换
  14. IE页面刷新ocx插件被释放,野指针非阻塞Sleep问题。
  15. Win10下用Anaconda安装TensorFlow
  16. React-Native之轮播组件looped-carousel的介绍与使用
  17. Go 初体验 - 令人惊叹的语法 - defer.3 - defer 函数参数计算时机
  18. javascript高级技巧篇(作用域安全、防篡改、惰性载入、节流、自定义事件,拖放)
  19. .NET 黑魔法 - 自定义日志扩展
  20. Eclipse中从svn中检出maven项目

热门文章

  1. Three.js 中的参数调试控制插件dat.GUI.JS - [Three.js] - [dat.GUI]
  2. udev规则,部署Multipath
  3. nginx产品环境安全配置-主配置文件
  4. ssh配置文件最佳实践(伪)
  5. django-rest-framework限流
  6. 抓包——HTTP分析
  7. mybatis源码分析--如何加载配置及初始化
  8. redis 练习 a的数据库数据迁移到b数据库
  9. BMI的Python实现
  10. Python——flask漏洞探究