Programación en PHP
/

Estudio de las excepciones en PHP

Cuando creamos un programa puede haber ciertas situaciones que causan error en la ejecución del mismo. En estos casos, conocidos o advertidos por el programador, pueden gestionarse para evitar la desagradable ventana de error.

Esta forma de gestionar los casos de error se llaman en PHP excepciones. Se declaran a través de la instrucción throw. No basta con declarar las excepciones sino que se completa la gestión con el uso de los bloques try, catch, finally que básicamente funcionan de la siguiente forma.

Si se produce un error en el bloque try la ejecución pasa directamente al bloque catch recuperando el objeto Exception y, desde PHP 5.5, el bloque finally se ejecuta se dé o no la excepción (el error).

Veamos todo esto con un caso práctico:

Se trata de evitar la división por cero cuando se utiliza en el programa una función que realiza la inversa. El valor para calcular su inversa se pasa como parámetro a la función.

Ejemplo, sin gestión de excepción y una programación convencional

<?php
    // creamos la función
    function inversa ($valor) {
        if ($valor == 0) {
            echo "División por cero. Error<br>";
        }else{
            echo "La inversa de $valor es ". 1/$valor."<br>";
        }
    }
    //script de uso de la función probando valores 2 y 0
    echo "Probamos 2 como valor<br>";
    inversa (2);
    echo "<hr>"; // línea horizontal
    echo "Probamos 0 como valor<br>";
    inversa (0);
?>

Ejecutar ejemplo

Ejemplo gestionando la excepción y una programación orientada a objetos


<?php
   //creamos la función inversa
   function inversa ($valor) {
      if ($valor==0){
         //declaración de la excepción
         throw new Exception ('División por cero.');
      }else{
         return 1/$valor;
      }
   } //fin function
// ------------------------------
   //Primera prueba valor = 2
   $valor = 2; //iniciamos variable
   try {
      echo inversa ($valor)."<br>";
   }
   catch (Exception $e) {
      //recuperación de la excepción
      echo 'Excepción : ', $e->getMessage(),"<br>";
   }
   finally {
     echo "Fin de la primera prueba.<br>";
   }
// ------------------------------
   //Segunda prueba valor = 0
   $valor = 0; //iniciamos variable
   try {
   echo inversa ($valor)."<br>";
   }
   catch (Exception $e) {
   //recuperación de la excepción
      echo 'Excepción : ', $e->getMessage(),"<br>";
   }
   finally {
      echo "Fin de la segunda prueba.<br>";
   }
?>

Ejecutar ejemplo

Deja una respuesta