<?php
class a {
public function a1 () {
try {
throw new Exception('123');
} catch (Exception $e) {
throw $e;
}
}
} class b {
public function b1 () {
try {
$a = new a();
$a->a1();
} catch (Exception $e) {
throw $e;
//throw new Exception($e->getMessage());
}
}
} class c {
public function c1 () {
try {
$a = new b();
$a->b1();
} catch (Exception $e) {
throw $e;
}
}
} try {
$c = new c();
$c->c1();
} catch (Exception $e) {
echo $e->getTraceAsString();
}
echo 'end'; ?>

页面try catch里使用c的 c1,c1里使用b的b1,b1里使用a的a1。



默认的是:a1里抛出异常,b1里捕获a1的异常,然后再把刚才的异常抛出,c1捕获,然后抛出,最后页面捕获并输出。

结果是:

X-Powered-By: PHP/5.1.1

Content-type: text/html



#0 D:\workspace\myzCollection\test.php(16): a->a1()

#1 D:\workspace\myzCollection\test.php(28): b->b1()

#2 D:\workspace\myzCollection\test.php(37): c->c1()

#3 C:\Program Files\Zend\ZendStudio-5.2.0\bin\php5\dummy.php(1): include('D:\workspace\my...')

#4 {main}end



 



第二个测试:

把b1里面的throw $e去掉,就是不抛出。

结果是:

X-Powered-By: PHP/5.1.1

Content-type: text/html



end



 



第三个测试:

把b1里面的throw new Exception($e->getMessage());打开。

抛出一个新的异常,这样b1以上的调用都拿不到a1的异常了。

结果是:

X-Powered-By: PHP/5.1.1

Content-type: text/html



#0 D:\workspace\myzCollection\test.php(28): b->b1()

#1 D:\workspace\myzCollection\test.php(37): c->c1()

#2 C:\Program Files\Zend\ZendStudio-5.2.0\bin\php5\dummy.php(1): include('D:\workspace\my...')

#3 {main}end



 



第四个测试:

把b1里面的try catch throw都去掉。

结果:仍然输出原来的异常,就是说中间的步骤不需要抛出,最上层也能拿到最下层抛出的异常。

只是有一个问题,b中如果出先异常,就没有办法取到,如果需要也检测b的话,那么也要在b中加上try catch


X-Powered-By: PHP/5.1.1

Content-type: text/html



#0 D:\workspace\myzCollection\test.php(16): a->a1()

#1 D:\workspace\myzCollection\test.php(28): b->b1()

#2 D:\workspace\myzCollection\test.php(37): c->c1()

#3 C:\Program Files\Zend\ZendStudio-5.2.0\bin\php5\dummy.php(1): include('D:\workspace\my...')

#4 {main}end

php Try Catch多层级异常测试的更多相关文章

  1. 廖雪峰Java8JUnit单元测试-2使用JUnit-2异常测试

    1.异常测试 对可能抛出的异常进行测试: 异常本身是方法签名的一部分: * public static int parseInt(String s) throws NumberFormatExcept ...

  2. TestNg 6.异常测试

    * 什么时候会用到异常测试??* 在我们期望结果为某一个异常的时候* 比如:我们传入了某些不合法的参数,程序抛出异常* 也就是我的预期结果就是这个异常看以下的一段代码: package com.cou ...

  3. Java如何使用catch来处理异常?

    在Java编程中,如何使用catch块来处理异常? 此示例显示如何使用catch来处理异常. package com.yiibai; public class UseOfCatch { public ...

  4. testng入门教程8 TestNG异常测试

    TestNG跟踪异常处理代码提供了一个选项.可以测试是否需要代码抛出异常或不抛出. @Test注释expectedExceptions 参数一起使用.现在,让我们来看看@Test(expectedEx ...

  5. 异常处理----使用 try…catch…finally 处理异常

    使用 try…catch…finally 处理异常 异常处理是通过try-catch-finally语句实现的. try { ...... //可能产生异常的代码 } catch( Exception ...

  6. TestNG异常测试

    用@Test(expectedExceptions = xxx) 声明 package com.janson; import org.testng.annotations.Test; public c ...

  7. TestNG(九) 异常测试

    package com.course.testng.suite; import org.testng.annotations.Test; public class ExpectedExeption { ...

  8. testNG之异常测试

    @Test(expectedExceptions = ) 在测试的时候,某些用例的输入条件,预期结果是代码抛出异常,那么这个时候就需要testNG的异常测试,先看一段会抛出异常的代码 exceptio ...

  9. php写错命名空间 导致catch不到异常

    写的微信回调接口出错了, 由于手里的调试工具(包括微信官方的开发者接口调试工具)不能把HTTP错误的详情dump出来,只会显示空白,所以打算在程序里加上try catch 捕获错误直接输出.重新测试, ...

随机推荐

  1. Android 返回键的处理

    多网友不明确怎样在Android平台上捕获Back键的事件.Back键是手机上的后退键,一般的软件不捕获相关信息可能导致你的程序被切换到后台.而回到桌面的尴尬情况,在Android上有两种方法来获取该 ...

  2. luogu2704 炮兵阵地 状态压缩DP

    题目大意:一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),在每一格平原地形上最多可以布置一支炮兵部队,能攻击到的区域:沿横向左右各两格,沿纵向上 ...

  3. ios 关于动画用法的总结

      #import "FirstVC.h" @implementation FirstVC /*     创建xib过程     1 创建xib(名字和类名相同)     2 文件 ...

  4. Shell 脚本实现 Linux 系统监控

    一.实验介绍 1.1 实验内容 本课程实现 shell 脚本监控系统的各项参数,并可以将脚本加入系统环境中,可以直接在终端里执行.还添加了几个参数,一个脚本可以执行不同的操作. 1.2 知识点 本实验 ...

  5. poj 2531 Network Saboteur 解题报告

    题目链接:http://poj.org/problem?id=2531 题目意思:将 n 个点分成两个部分A和B(也就是两个子集啦), 使得子集和最大(一定很难理解吧,呵呵).举个例子吧,对于样例,最 ...

  6. 第六届蓝桥杯C++B组省赛

    1.奖券数目 2.星系炸弹 3.三羊献瑞 4.格子中输出 5.九数组分数 6.加法变乘法 7.牌型种数 8.移动距离 9.垒骰子 10.生命之树 1.奖券数目 奖券数目有些人很迷信数字,比如带“4”的 ...

  7. receive和process的过程

    (一) receive最终在fuse_kern_chan.c中的fuse_kern_chan_receive函数实现,使用系统调用读取 res = read(fuse_chan_fd(ch), buf ...

  8. hadoop datanode启动失败(All directories in dfs.data.dir are invalid)

    由于hadoop节点的磁盘满了,导致节点死掉,今天对其进行扩容.首先,将原节点的数据拷贝到目标节点下,从而避免数据的丢失,但是在执行hadoop_daemon.sh start datanode后没有 ...

  9. 用mkdirs创建目录

    import java.io.*; class a { public static void main(String args[]) { createDir("c:/fuck"); ...

  10. iOS中NSNotification、delegate、KVO三者之间的区别与联系?

    前面分别讲了delegate.notification和KVO的实现原理,以及实际使用步骤,我们心中不禁有个疑问,他们的功能比较类似,那么在实际的编程中,如何选择这些方式呢? 在网上看到一个博客上详细 ...