close
rfc:multiple-catch

PHP RFC: Catching Multiple Exception Types

Introduction

When two different types of exceptions are handled the same way, it is sometimes required to duplicate the code of the catch statements.

For example :

<?php
 
try {
   // Some code...
} catch (ExceptionType1 $e) {
   // Code to handle the exception
} catch (ExceptionType2 $e) {
   // Same code to handle the exception
} catch (Exception $e) {
   // ...
}

A solution to fix this problem on the user level would be to implement a common interface for ExceptionType1 and ExceptionType2 and catch it. However, this is only possible when you control the exception hierarchy in your own code, but not possible when you don't control the code.

Proposal

This RFC introduces the possibility to catch multiple exception types in a single catch statement to avoid code duplication.

<?php
 
try {
   // Some code...
} catch (ExceptionType1 | ExceptionType2 $e) {
   // Code to handle the exception
} catch (\Exception $e) {
   // ...
}

This syntax and functionality is compatible with the Union types RFC proposed here : https://wiki.php.net/rfc/union_types

When is it useful ?

  • When a single method/function throw two different types of exceptions that you handle the same way;
  • When libraries are leaking their dependency's exceptions.

Backward Incompatible Changes

None.

Proposed PHP Version(s)

7.1

RFC Impact

To SAPIs

None

To Existing Extensions

None

To Opcache

None

To PHP tools/IDE

This change will require every PHP tools and IDE based on an AST parser to be modified to take this syntax change into account.

Vote

As this is a language change, a 2/3 majority is required. The vote is a straight Yes/No vote for accepting the RFC and merging the patch. Voting started on 2016-04-17 and will end on 2016-05-01.

Should milti-catch be added to PHP 7.1
Real name Yes No
bishop BERJAYA 
blanchonvincent BERJAYA 
bwoebi BERJAYA 
colinodell BERJAYA 
danack BERJAYA 
daverandom BERJAYA 
davey BERJAYA 
derick  BERJAYA
dmitry BERJAYA 
francois BERJAYA 
galvao BERJAYA 
guilhermeblanco BERJAYA 
hywan BERJAYA 
jhdxr BERJAYA 
jpauli BERJAYA 
jwage BERJAYA 
kalle BERJAYA 
klaussilveira BERJAYA 
laruence  BERJAYA
lcobucci  BERJAYA
leigh BERJAYA 
levim BERJAYA 
lstrojny BERJAYA 
marcio BERJAYA 
mariano BERJAYA 
mbeccati BERJAYA 
mcmic BERJAYA 
mightyuhu BERJAYA 
mike BERJAYA 
ocramius  BERJAYA
patrickallaert  BERJAYA
pauloelr BERJAYA 
pierrick BERJAYA 
pollita BERJAYA 
ramsey BERJAYA 
rmf BERJAYA 
sammyk BERJAYA 
santiagolizardo BERJAYA 
stas BERJAYA 
svpernova09 BERJAYA 
thorstenr BERJAYA 
trowski BERJAYA 
tyrael BERJAYA 
weierophinney BERJAYA 
zeev BERJAYA 
zimt  BERJAYA
Final result: 40 6
This poll has been closed.

Patches and Tests

Implementation

rfc/multiple-catch.txt · Last modified: by 127.0.0.1

BERJAYA