====== PHP RFC: Catching Multiple Exception Types ====== * Version: 1.0 * Date: 2016-03-06 * Author: Pierrick Charron , Bronisław Białek * Status: Implemented (PHP 7.1) * First Published at: http://wiki.php.net/rfc/multiple-catch ===== 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 : 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. 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. ===== Links and Literature ===== Similar feature in Java: http://docs.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html Request on StackOverflow: http://stackoverflow.com/questions/8439581/catching-multiple-exception-types-in-one-catch-block ===== 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. * Yes * No ===== Patches and Tests ===== Patch : [[https://github.com/php/php-src/pull/1796/files]] ===== Implementation ===== Merged into php-src for PHP 7.1: https://github.com/php/php-src/commit/0aed2cc2a440e7be17552cc669d71fdd24d1204a