Capturando múltiples tipos de excepciones en PHP 7

Con la introducción de los throwables, PHP alineó sus esfuerzos en torno a la detección de errores, informes y manejo. Los desarrolladores pueden usar los bloques try … catch … finalmente para manejar las excepciones como mejor les parezca. La posibilidad de usar múltiples bloques catch puede dar un control más fino sobre la respuesta a ciertos tipos de excepciones. A veces, sin embargo, hay grupos de excepciones que nos gustaría responder igualmente .


En PHP 7.1, el manejo de excepciones se refinó aún más para acomodar este desafío.
Echemos un vistazo al siguiente ejemplo de PHP 5.x:

try {
// …
}
catch (\InvalidArgumentException $e)
{
// …
}
catch (\LengthException $e)
{
// …
}
catch (Exception $e)
{
// …
}
finally
{
// …
}

Aquí, estamos manejando tres excepciones, dos de las cuales son bastante específicas, y una tercera que se aplica si las dos anteriores no coinciden. El último bloque es simplemente una limpieza, si sucede que se necesita uno. Imagine ahora que se necesita la misma respuesta para ambos bloques \InvalidArgumentException y \LengthException. La solución sería copiar una porción completa de código de un bloque de excepción a otro o, en el mejor de los casos, escribir una función que envuelva el código de respuesta y luego invocar esa función dentro de cada bloque de excepción.
La sintaxis de manejo de excepciones recién agregada está habilitada para capturar múltiples tipos de excepciones.
Al usar una sola barra vertical (|), podemos definir múltiples tipos de excepción para el parámetro catch, según el siguiente ejemplo de PHP 7.x:

try {
// ...}
catch (\InvalidArgumentException | \LengthException $e)
{
// ...
}
catch (\Exception $e)
{
// ...
}
finally
{
// ...
}

Además de un toque de elegancia, la nueva sintaxis afecta directamente la reutilización del código para mejor.

Comparte