php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #36779 Request 'finally' support for exceptions
Submitted: 2006-03-18 03:47 UTC Modified: 2012-08-14 01:17 UTC
Votes:45
Avg. Score:4.7 ± 0.6
Reproduced:37 of 40 (92.5%)
Same Version:20 (54.1%)
Same OS:28 (75.7%)
From: since71 at gmail dot com Assigned:
Status: Duplicate Package: Scripting Engine problem
PHP Version: 5.1.2 OS: All
Private report: No CVE-ID: None
View Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
If you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: since71 at gmail dot com
New email:
PHP Version: OS:

 

 [2006-03-18 03:47 UTC] since71 at gmail dot com
Description:
------------
A previous thread for a request to add "finally" support for exceptions was relatively quickly killed in what seemed, to me, the beginning of a potentially useful thread (http://bugs.php.net/bug.php?id=32100) and I would like to re-open it. The original requestors comments rings true for many of us developing PHP.

FWIW: I heartily agree that "finally" should be implemented in some (hopefully near) future version of PHP.


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2011-08-09 20:17 UTC] cmanley at xs4all dot nl
I agree. Not having "finally" is a language shortcoming.

One example I just ran into that made me cuss at PHP is this. Without finally, 
one cannot use breaks in a try construct as break ends execution of the current 
for, foreach, while, do-while or switch structure.

Code example:

do {
  $lock = new PseudoLock();
  try {
    // do stuff
    if (...) {
      break; // this is a no-no without finally
    }
  }
  catch(Exception $e) {
    $lock = null; // release lock
    throw $e;
  }
  $lock = null; // release lock

  // Do more stuff.

} while (!$satisfied);


Note how the inner break will cause both resource lock release attempts to be 
skipped. If the finally construct existed, the break would first pass through 
the finally where the lock can be released, and then pass out of it's loop 
structure. That's how it works in other languages.
 [2012-02-28 17:31 UTC] kiall at managedit dot ie
I think these three snippets illustrate why finally would be very useful..

Python: http://codepad.org/zcVRYPzS
Ruby: http://codepad.org/uORFxLVy
PHP: http://codepad.org/t0WtzZ9p
 [2012-08-14 01:17 UTC] aharvey@php.net
-Status: Open +Status: Duplicate -Package: Feature/Change Request +Package: Scripting Engine problem
 [2012-08-14 01:17 UTC] aharvey@php.net
Implemented on master (see request #32100 and https://wiki.php.net/rfc/finally for more details).
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 13:01:31 2024 UTC