Daniel Segovia

Blog personal

Archive for the ‘try’ tag

Excepciones

Hacer un comentario

Una excepción en PHP es similar a las excepciones en otros lenguajes.
Una excepción puede ser lanzada y atrapada. Dentro de un bloque try definiremos nuestros código para facilitar la captura de posibles excepciones. Cada bloque try debe poseer al menos un bloque catch, y este actuará en caso de que una excepción sea lanzada. La excepción la lanzaremos mediante throw
Cuando una excepción es lanzada todo el código que sigue a ese lanzamiento dentro del bloque try no será ejecutado, entonces el flujo del programa buscará el “catch” correspondiente a ese bloque try. De no haber un catch para ese bloque PHP omitirá un fatal error con un mensaje de “Uncaught Exception”, a menos que este definido un gestor con set_exception_handler().

<?php
function division($dividendo, $divisor) {
    if ($divisor == 0) {
        throw new Exception('Imposible dividir por 0');
    }
    else return $dividendo/$divisor;
}
 
try {
    echo division(10, 5) . "<br />";
    echo division(25, 3) . "<br />";
    echo division(8, 0) . "<br />";
} catch (Exception $e) {
    echo 'Excepción capturada: ',  $e->getMessage(), "\n";
}
 
?>

Resultado

2
8.33333333333
Excepción capturada: Imposible dividir por 0

Un ejemplo dentro de una clase
Es muy común en una clase de base de datos que se lance una excepción cuando no se puede conectar a la base.

<?php
 
class db{
 
    private $link;
 
    function __construct($host, $user, $pass, $db){
        $this->link = false;
        $this->conectar($host, $user, $pass);
        $this->selectDB($db);
    }
 
    function conectar($host, $user, $pass){
        try{
            $this->link = @mysql_pconnect($host, $user, $pass);
            if(!$this->link){
                throw new Exception('No pudo conectarse a la base de datos');
            }
        } catch (Exception $e) {
            echo 'Excepción capturada: ',  $e->getMessage(), "<br />";
        }
    }
 
    function selectDB($db){
        try{
            if(@mysql_select_db($db, $this->link) || !$this->link){
                throw new Exception('No puede seleccionarse la base de datos "'.$db.'"');
            }
        } catch (Exception $e) {
            echo 'Excepción capturada: ',  $e->getMessage(), "<br />";
        }
 
    }
}
 
//usuario, contraseña y db correctas
$db = new db('localhost', 'usuario', 'passok', 'encuentas');
//usuario y contraseña fallidas
$db = new db('localhost', 'usuario', 'passfaild', 'encuenstas');
//usuario y contrasebas correctas y nombre de db fallida
$db = new db('localhost', 'usuario', 'passok', 'dbfaild');
 
?>

Written by Daniel Segovia

mayo 6th, 2011 at 11:53 am