This is an old revision of the document!
PHP RFC: non-capturing catches
- Version: 0.9
- Date: 2020-04-05
- Author: Max Semenik maxsem.wiki@gmail.com
- Status: Under Discussion
- First Published at: https://wiki.php.net/rfc/non-capturing_catches
Introduction
Currently, PHP requires to capture the exception being caught to a variable:
try { foo(); } catch (SomeException $ex) { die($ex->getMessage()); }
However, you need to specify the variable even if it's not used:
try { changeImportantData(); } catch (PermissionException $ex) { echo "You don't have permission to do this"; }
Someone reading the above code is left to wonder if the author intended to not use the exception variable or it's a bug.
Proposal
Allow catching exceptions without capturing them to variables:
try { changeImportantData(); } catch (PermissionException) { // The intention is clear: exception details are irrelevant echo "You don't have permission to do this"; }
Prior art
Such change was first proposed in this RFC 7 years ago. It was turned down mostly because it also wanted to allow blanket catches like this:
try { foo(); } catch { bar(); }
Meanwhile what I'm proposing here has received mostly positive feedback so I feel it's worth revisiting.
Backward Incompatible Changes
None.
Proposed PHP Version(s)
8.0
RFC Impact
None.
Open Issues
Make sure there are no open issues when the vote starts!
Proposed Voting Choices
Yes/no.
Patches and Tests
* https://github.com/php/php-src/pull/5345 - work in progress
Implementation
After the project is implemented, this section should contain
- the version(s) it was merged into
- a link to the git commit(s)
- a link to the PHP manual entry for the feature
- a link to the language specification section (if any)
References
*
Rejected Features
Keep this updated with features that were discussed on the mail lists.