PHP的新特性finally
2015-08-25 14:50
218 查看
· 作者: Laruence( )
· 本文地址: http://www.laruence.com/2012/08/16/2709.html
· 转载请注明出处
最近,
我提交的关于finally的RFC: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..等等其他语言都有,
PHP的finally和其他的语言相似.
对于finally来说,
一个比较容易让人迷惑的地方就是在finally中return,
因为finally必须保证一定被执行,
所以如果我们在try中return了, finally也会被调用,
那么如果finally也return呢?
到底最后的return的值是那个呢?
在PHP中来说,
如果在finally中return,
那么就会覆盖原有的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).
· 本文地址: http://www.laruence.com/2012/08/16/2709.html
· 转载请注明出处
最近,
我提交的关于finally的RFC: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..等等其他语言都有,
PHP的finally和其他的语言相似.
对于finally来说,
一个比较容易让人迷惑的地方就是在finally中return,
因为finally必须保证一定被执行,
所以如果我们在try中return了, finally也会被调用,
那么如果finally也return呢?
到底最后的return的值是那个呢?
在PHP中来说,
如果在finally中return,
那么就会覆盖原有的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).
相关文章推荐
- 深入理解PHP原理之异常机制
- 关于PHP浮点数你应该知道的(All ‘bogus’ about the float in PHP)
- xampp版本和具体的php,mysql版本的对应
- 深入理解PHP原理之Session Gc的一个小概率Notice
- 注意PHP对字符串的递增运算
- php array_push()函数
- PHP浮点数的一个常见问题的解答
- PHP配置指令作用域说明(PHP_INI_PERDIR、PHP_INI_SYSTEM、PHP_INI_USER、PHP_INI_ALL)
- php clone()中的地址传递(&)
- Yii的事件和行为的区别和应用
- NRPE: Unable to read output的原因及排除
- 配置ftp服务
- yii2 表单使用方法
- php 解决和避免form表单重复提交的方法
- YII 1.0 发表文章用到的小物件
- URL重写 省略index.php
- 意识流php入门基础学习笔记
- laravel 笔记
- PHP 安装
- PHP mysql与mysqli事务