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'); ?>