Una excepción es un resultado inesperado del programa que puede ser manejado por el propio programa. El manejo de excepciones en PHP es casi similar al manejo de excepciones en todos los lenguajes de programación.
PHP proporciona las siguientes palabras clave especializadas para este propósito.
- try: Representa un bloque de código en el que puede surgir una excepción.
- catch: representa un bloque de código que se ejecutará cuando se haya lanzado una excepción en particular.
- throw: Se utiliza para lanzar una excepción. También se usa para enumerar las excepciones que lanza una función, pero que no se maneja sola.
- finalmente: se usa en lugar del bloque catch o después del bloque catch, básicamente se coloca para la actividad de limpieza en el código PHP.
¿Por qué manejar excepciones en PHP?
Las siguientes son las principales ventajas del manejo de excepciones sobre el manejo de errores.
- Separación del código de manejo de errores del código normal: en el código de manejo de errores tradicional siempre hay un bloque if else para manejar los errores. Estas condiciones y el código para manejar los errores se mezclaron, por lo que se vuelve ilegible. Con try Catch, el código del bloque se vuelve legible.
- Agrupación de tipos de error: en PHP, tanto los tipos básicos como los objetos se pueden lanzar como excepción. Puede crear una jerarquía de objetos de excepción, agrupar excepciones en espacios de nombres o clases, categorizarlas según tipos.
Manejo de excepciones en PHP:
- El siguiente código explica el flujo del bloque try catch normal en PHP:
<?php
// PHP Program to illustrate normal
// try catch block code
function
demo(
$var
) {
echo
" Before try block"
;
try
{
echo
"\n Inside try block"
;
// If var is zero then only if will be executed
if
(
$var
== 0)
{
// If var is zero then only exception is thrown
throw
new
Exception(
'Number is zero.'
);
// This line will never be executed
echo
"\n After throw (It will never be executed)"
;
}
}
// Catch block will be executed only
// When Exception has been thrown by try block
catch
(Exception
$e
) {
echo
"\n Exception Caught"
,
$e
->getMessage();
}
// This line will be executed whether
// Exception has been thrown or not
echo
"\n After catch (will be always executed)"
;
}
// Exception will not be rised
demo(5);
// Exception will be rised here
demo(0);
?>
Producción:Before try block Inside try block After catch (will be always executed) Before try block Inside try block Exception CaughtNumber is zero. After catch (will be always executed)
- El siguiente código explica el flujo de prueba normal, captura y finalmente bloque en PHP
<?php
// PHP Program to illustrate normal
// try catch block code
function
demo(
$var
) {
echo
" Before try block"
;
try
{
echo
"\n Inside try block"
;
// If var is zerothen only if will be executed
if
(
$var
== 0) {
// If var is zero then only exception is thrown
throw
new
Exception(
'Number is zero.'
);
// This line will never be executed
echo
"\n After throw it will never be executed"
;
}
}
// Catch block will be executed only
// When Exception has been thrown by try block
catch
(Exception
$e
) {
echo
"\n Exception Caught"
.
$e
->getMessage();
}
finally {
echo
"\n Here cleanup activity will be done"
;
}
// This line will be executed whether
// Exception has been thrown or not
echo
"\n After catch it will be always executed"
;
}
// Exception will not be rised
demo(5);
// Exception will be rised here
demo(0);
?>
Producción:Before try block Inside try block Here cleanup activity will be done After catch (will be always executed) Before try block Inside try block Exception CaughtNumber is zero. Here cleanup activity will be done After catch (will be always executed)
- Uso de la clase de excepción personalizada
<?php
class
myException
extends
Exception {
function
get_Message() {
// Error message
$errorMsg
=
'Error on line '
.
$this
->getLine().
' in '
.
$this
->getFile()
.
$this
->getMessage().
' is number zero'
;
return
$errorMsg
;
}
}
function
demo(
$a
) {
try
{
// Check if
if
(
$a
== 0) {
throw
new
myException(
$a
);
}
}
catch
(myException
$e
) {
// Display custom message
echo
$e
->get_Message();
}
}
// This will not generate any exception
demo(5);
// It will cause an exception
demo(0);
?>
Producción:Error on line 20 in /home/45ae8dc582d50df2790517e912980806.php0 is number zero
- Establecer un controlador de excepciones de nivel superior: la función set_exception_handler() establece todas las funciones definidas por el usuario en todas las excepciones no detectadas.
<?php
// PHP Program to illustrate normal
// try catch block code
// Function for Uncaught Exception
function
myException(
$exception
) {
// Details of Uncaught Exception
echo
"\nException: "
.
$exception
->getMessage();
}
// Set Uncaught Exception handler
set_exception_handler(
'myException'
);
function
demo(
$var
) {
echo
" Before try block"
;
try
{
echo
"\n Inside try block"
;
// If var is zero then only if will be executed
if
(
$var
== 0)
{
// If var is zero then only exception is thrown
throw
new
Exception(
'Number is zero.'
);
// This line will never be executed
echo
"\n After throw (it will never be executed)"
;
}
}
// Catch block will be executed only
// When Exception has been thrown by try block
catch
(Exception
$e
) {
echo
"\n Exception Caught"
,
$e
->getMessage();
}
// This line will be executed whether
// Exception has been thrown or not
echo
"\n After catch (will be always executed)"
;
if
(
$var
< 0) {
// Uncaught Exception
throw
new
Exception(
'Uncaught Exception occurred'
);
}
}
// Exception will not be rised
demo(5);
// Exception will be rised here
demo(0);
// Uncaught Exception
demo (-3);
?>
Producción:Before try block Inside try block After catch (will be always executed) Before try block Inside try block Exception CaughtNumber is zero. After catch (will be always executed) Before try block Inside try block After catch (will be always executed) Exception: Uncaught Exception occurred
Publicación traducida automáticamente
Artículo escrito por ankit15697 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA