PHP的新特性finally


·        作者Laruence(   )

·        本文地址http://www.laruence.com/2012/08/16/2709.html

·        转载请注明出处

最近, 我提交的关于finallyRFC:Supports finally keyword已经提交到了PHP主干, 今天就给大家介绍一下这个新特性的背景, 和使用方法.

关于这个特性的需求, 最早是在2005年提出来的: FR #32100, 但一直没有人去实现它. 上个月又有人提出来, 我就是抱着试试的态度去实现了一下, 因为有人告诉我, 一直没有实现, 有一个原因是因为很难实现(或许对于一个码农来说, 喜欢挑战难题, 是天性, 呵呵)..

对于现在的PHP来说, 如果我们需要在发生我们当前不能处理的异常的时候, 做一些工作, 那么就会写下类似于这样代码:

1.       functionanonymous () {

2.          try {

3.             function_may_throw_exception();

4.          } catch (Exception $e) {

5.             clearup();

6.             throw $e;

7.          }

8.          clearup();

9.       }

我们看到, 我们需要显式的写俩便clearup(). 那么finally就可以解决这个问题.

finally并不是PHP的原创, C#, Javascript,Java..等等其他语言都有, PHPfinally和其他的语言相似.

对于finally来说, 一个比较容易让人迷惑的地方就是在finallyreturn, 因为finally必须保证一定被执行, 所以如果我们在tryreturn, finally也会被调用, 那么如果finallyreturn? 到底最后的return的值是那个呢? PHP中来说, 如果在finallyreturn, 那么就会覆盖原有的return.

1.       <?php

2.       functionanonymous() {

3.           try {

4.              return1;

5.           } finally {

6.              return2;

7.           }

8.       }

9.        

10.    var_dump(anonymous());

会得到int(2).

finally结合异常, return, try catch finally嵌套的话, 流程确实有点绕, 这也是为什么一直没有被人能实现的一个原因, 不过让我们看看这个finally执行流程图(来自Finally Getting finally In PHP?),会对我们理解这个流程会有帮助:

Finally处理流程

在有了finally以后, 文章开头的例子就可以写作:

1.       functionanonymous () {

2.          try {

3.             function_may_throw_exception();

4.          } finally {

5.             clearup();

6.          }

7.       }

这样的特性, 对于一些代码洁癖者来说, 会舒服很多 

代码已经提交到了PHP主干, 不过等大家能用到, 估计最早也得明年了 (伴随PHP5.5).

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值