php Try Catch异常测试

5年以前  |  阅读数:757 次  |  编程语言:PHP 

页面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
    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 789;

    ?>
 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例