rfc:finally
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
rfc:finally [2012/07/24 17:09] – [Proposal] laruence | rfc:finally [2017/09/22 13:28] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 2: | Line 2: | ||
* Version: 1.0 | * Version: 1.0 | ||
* Date: 2012/07/24 | * Date: 2012/07/24 | ||
- | * Author: Xinchen Hui < | + | * Author: Xinchen Hui < |
- | * Status: | + | * Status: |
* First Published at: http:// | * First Published at: http:// | ||
+ | * Alternative Reading: <Finally Getting finally In PHP?> http:// | ||
===== Introduction ===== | ===== Introduction ===== | ||
This RFC is try to introduce ' | This RFC is try to introduce ' | ||
+ | without this feature, user have to write codes like following one to do cleanup while an un-handlable exception occurred: | ||
+ | <code php> | ||
+ | <?php | ||
+ | $db = mysqli_connect(); | ||
+ | try { | ||
+ | | ||
+ | } catch (Exception $e) { | ||
+ | | ||
+ | throw $e; | ||
+ | } | ||
+ | mysql_close($db); | ||
+ | </ | ||
+ | |||
+ | introducing finally is not about save one or two lines for such situation, it's about give the user a more proper way to handle such issue. | ||
===== Proposal ===== | ===== Proposal ===== | ||
The finally block always executes when the try block exits. This ensures that the finally block is executed even if an unexpected exception occurs. But finally is useful for more than just exception handling — it allows the programmer to avoid having cleanup code accidentally bypassed by a return, continue, or break. Putting cleanup code in a finally block is always a good practice, even when no exceptions are anticipated. | The finally block always executes when the try block exits. This ensures that the finally block is executed even if an unexpected exception occurs. But finally is useful for more than just exception handling — it allows the programmer to avoid having cleanup code accidentally bypassed by a return, continue, or break. Putting cleanup code in a finally block is always a good practice, even when no exceptions are anticipated. | ||
Line 14: | Line 29: | ||
<code php> | <code php> | ||
<?php | <?php | ||
- | try { | + | $db = mysqli_connect(); |
- | $fp = fopen("/ | + | try { |
- | //error occurred | + | call_some_function($db);//the function may throw exceptions which we can not handle |
- | throw new Exception($e); | + | } finally { |
- | | + | mysqli_close($db); |
- | fclose($fp); | + | } |
- | | + | |
</ | </ | ||
Line 37: | Line 51: | ||
</ | </ | ||
- | the above script will outpu: | + | the above script will output: |
< | < | ||
this will be called | this will be called | ||
Line 73: | Line 87: | ||
123432int(1) | 123432int(1) | ||
</ | </ | ||
+ | |||
+ | There are also lots of edge cases could be found in the Test& | ||
===== Patch ===== | ===== Patch ===== | ||
* Patch: https:// | * Patch: https:// | ||
- | * Examples: https:// | + | ===== Tests & Examples |
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | |||
+ | ===== Vote ===== | ||
+ | <doodle | ||
+ | title=" | ||
+ | * Yes | ||
+ | * No | ||
+ | </doodle> | ||
===== Changelog ===== | ===== Changelog ===== | ||
* 2012/07/24 Xinchen Hui: Initial version | * 2012/07/24 Xinchen Hui: Initial version | ||
+ | * 2012/07/26 Xinchen Hui: Update RFC | ||
+ | * 2012/08/06 Xinchen Hui: Open voting | ||
+ | * 2012/08/13 Xinchen Hui: Close voting, RFC win the voting | ||
+ | * 2012/08/15 Xinchen Hui: Committed |
rfc/finally.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1