Edit report at http://bugs.php.net/bug.php?id=32100&edit=1

 ID:                 32100
 Comment by:         michael202 at gmx dot de
 Reported by:        ceefour at gauldong dot net
 Summary:            Request 'finally' support for exceptions
 Status:             Closed
 Type:               Feature/Change Request
 Package:            Feature/Change Request
 Operating System:   *
 PHP Version:        5.*
 Block user comment: N

 New Comment:

I also think that try-finally is useful.

try catch is no elegant replacement. 

Just needed it today again.

finally is more elegant than an other solution.



For example:



try {

  lots o' code

  if a return

  ..

  if b exit

  ..

} finally

  do somethin

}



Another solution to the "finally" problem is to use goto.

Not so elegant but not a bad thing according to Knuth.


Previous Comments:
------------------------------------------------------------------------
[2010-08-16 12:42:11] torsten dot landmann at bauermedia dot com

I also agree: 'finally' is needed. I really don't get why it has been
left out.



There is no elegant equivalent, especially so since rethrowing the
exception alters file and line number saved in the exception, so later
it's hard to find out where it originally came from.



Please offer "finally". Don't worry, nobody will be forced to use it.

I definitely will.



thuejk showed very well how 'finally' helps with keeping your code
clean. Or vice versa: How the absence of it often causes the need to
copy and paste code (which is always a bad development pattern).

------------------------------------------------------------------------
[2010-06-27 00:59:16] thuejk at gmail dot com

>We've had long discussions and came to the only conclusion that we
don't need 

that, for more search the mailing list archieves.



Where is that discussion? I haven't been able to find it. Only people
saying 

that finally is utterly useless, without showing any signs that they
have 

actually considered finally's uses.



As the other comments have said, sometimes some code inside a try will
allocate 

a non-php ressource which need to be deallocated whether or not an
exception is 

thrown. To avoid writing that code twice, you need it in finally.



Version without finally:



try {

   allocate non-php resource

} catch ($ex) {

   deallocate non-php resource

   throw $ex;

}

deallocate non-php resource



Version with finally:



try {

   allocate non-php resource

} finally {

   deallocate non-php resource

}



The finally code is obviously "better". And it is a completely
reasonable way to 

code.



Sure you can emulate finally with more code, but so can a Turin Machine.
finally 

is syntactic sugar which makes it easier to write maintainable programs.

------------------------------------------------------------------------
[2010-06-16 20:54:10] orlandu96 at gmail dot com

are there any updates on this issue?

------------------------------------------------------------------------
[2010-03-31 12:40:17] a dot e at inne dot pl

Could finally also mean that 'returns' will be executed after the
finally block



try{

   some ifs

   ...

   return x

   ...

   more ifs

   ...

   throw

   ... 

   return y

}catch{

   handle exceptions

}finally{

   No matter if there was exception or not

   execute this bit before you leave the method.

   For example if object has some state it might be necessary to 

   make sure its consistent at the end

}



In the case i have now at work i had to add method call before every
return and throw to make sure that my data will be set properly before
method ends.



Would that be a feature someone might like?



thanks



art

------------------------------------------------------------------------
[2005-02-25 20:27:50] ceefour at gauldong dot net

I don't think the code is absolutely equivalent. And omitting the
rethrow statement gives up the whole notion of 'finally'.



Actually my code was trying to *emulate* finally. But it's not the right
thing to do. Finally should not even touch the Exception at all...
Finally doesn't even know there is an exception.



I have to agree that 'finally' is not _required_ by PHP, but not by
'we'. 'We' in this sense refers to 'all PHP developers' and that
includes me, and I _need_ (although not _require_) this functionality.
Almost the same as namespaces don't have to be in PHP but some people
feel the need for it. However namespaces are much harder to implement
yet I think finally is relatively straightforward since we can already
emulate it using try/catch, but with the quirks.



I don't think finally is a control flow block. By emulating finally
using try/catch, yes maybe, but we have no other choice. Finally is not
a control flow because why..? Finally has no idea whether it is inside
an Exception or not, and cannot handle it i.e. it's not able to
_control_ processing based on the state of Exception. In this sense
finally is unconditional, just like ordinary statements but they're also
executed when Exception occurs.



IMHO Java has no responsibility here, I think exceptions, try, catch,
finally, are fully the domain of Object Oriented [Design &] Programming.
Delphi, C++Builder, C++, etc. has it, not just Java.



And even if it does, 'design' is out of the scope of PHP. PHP is a
programming language, not a design tool. PHP isn't strictly procedural
and also isn't strictly object-oriented. It's just a matter of taste.
"Be conservative with what you emit and be liberal with what you accept"
and everyone's going to be happy.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    http://bugs.php.net/bug.php?id=32100


-- 
Edit this bug report at http://bugs.php.net/bug.php?id=32100&edit=1

Reply via email to