PHP 7.1 ha introdotto un nuovo sistema per il catching delle eccezioni simile a quello già in uso in linguaggi come Java, ora infatti gli sviluppatori avranno la possibilità di catturare più tipologie di eccezioni all'interno del medesimo blocco catch; si tratta di una feature finalizzata alla massimizzazione della produttività, in questo modo infatti verrà meno l'esigenza di ripetere più volte lo stesso codice per l'individuazione di eccezioni di natura differente.
Prima di PHP 7.1, quando vi era la necessità di gestire due diversi tipi di eccezioni nello stesso modo era necessario non di rado duplicare le istruzioni per il catching si aveva quindi l'esigenza di ricorrere ad espressioni strutturate in questo modo:
try {
// espressione...
} catch (ExceptionType1 $e) {
// gestione del primo tipo di eccezione
} catch (ExceptionType2 $e) {
// gestione del secondo tipo di eccezione
} catch (Exception $e) {
// ulteriore codice per la gestione delle eccezioni
}
Inizialmente si era pensato di ovviare a questo problema implementando un'interfaccia comune per ExceptionType1 e ExceptionType2 in modo che potesse essere sottoposta a catching con un singolo passaggio; tale soluzione si è però rivelata insufficiente perché presupponeva che lo sviluppatore avesse la possibilità di controllare pienamente la gerarchia delle eccezioni così come viene riportata nel sorgente.
In questo modo infatti ci si sarebbe trovati di fronte a diverse casistiche caratterizzate da un elevato grado di imprevedibilità, come nel caso di progetti collaborativi. Si è quindi deciso di supportare il catching per i tipi multipli di eccezioni ricorrendo alla seguente sintassi:
try {
// espressione...
} catch (ExceptionType1 | ExceptionType2 $e) {
// gestione eccezioni
} catch (\Exception $e) {
// ...
}
E facile notare come i principi che regolavano già in precedenza la gestione delle eccezioni non vengono stravolti con l'introduzione di questa nuova funzionalità, essi in realtà non sono cambiati perché si è preferito migliorare gli strumenti preesistenti ricorrendo ad un potenziamento della sintassi.