Ver Mensaje Individual
  #10 (permalink)  
Antiguo 24/08/2011, 11:16
Avatar de GatorV
GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Problema con try catch

Yo lo veo de otra manera, y es que depende también como hagas la excepción, pero por ejemplo, el login, es algo sencillo:
Código PHP:
Ver original
  1. try {
  2.       $myLoginService->login($user, $pass);
  3.       $this->createLocalSession($user);
  4.       $this->redirect('/panel');
  5. } catch (LoginException $ex) {
  6.       Logger::log($ex);
  7.       switch ($ex->getCode()) {
  8.       case 1: // not found
  9.              $sErrorMessage = 'No se encontro el usuario';
  10.              break;
  11.       case 2: // bad password
  12.              $sErrorMessage = 'Password incorrecto';
  13.              break;
  14.       }
  15. } catch (SessionException ($ex) {
  16.       if ($ex->getCode() == 5) { // Por ejemplo que el disco esta lleno y no hay espacio
  17.            Alerts::dispatchAlert($ex, 'Error en disco');
  18.            $sErrorMessage = 'Error en disco';
  19.            $this->redirect('/');
  20.       }
  21.  
  22.       Logger::log($ex);
  23.       $sErrorMessage = 'Error al crear la sesión';
  24. }

De esta forma tienes un mejor control sobre lo que el código puede generar, aunque claro puede esto llegar a muy malos habitos, la idea es controlar exactamente que excepcion esperas encontrar, ya que como dices muchos programadores de Java, tienden a solamente throw new Exception() y se acabo y es casi lo mismo que el Goto.

Es por eso que por ejemplo Zend define un tipo de excepción por cada paquete, para que puedas controlar específicamente que error esperas encontrar, y tengas una mejor forma de mostrar errores al usuario, logear, enviar alertas, etc. en lugar de presentar una pantalla en blanco cuando ocurre un error.