2011-01-19 21 views
10

Estoy queriendo manejar excepciones en mi aplicación php yo mismo.PHP excepción personalizada manejo

Cuando lanzo una excepción, quiero pasar un título para usar en la página de error.

por favor alguien puede enlazar a un buen tutorial, o escribir una explicación clara de cómo el manejo de excepciones realmente funciona (por ejemplo, cómo saber qué tipo de excepción que se trata de ect.

Respuesta

29

Documentos oficiales es un buen lugar para comenzar - http://php.net/manual/en/language.exceptions.php.

Si solo se trata de un mensaje que desea capturar, lo haría de la siguiente manera;

try{ 
    throw new Exception("This is your error message"); 
}catch(Exception $e){ 
    print $e->getMessage(); 
} 

Si desea capturar errores específicos que usaría:

try{ 
    throw new SQLException("SQL error message"); 
}catch(SQLException $e){ 
    print "SQL Error: ".$e->getMessage(); 
}catch(Exception $e){ 
    print "Error: ".$e->getMessage(); 
} 

Para el registro - que había necesidad de definir SQLException. Esto puede hacerse tan simple como:

class SQLException extends Exception{ 

} 

por un título y el mensaje que se extendería la clase Exception:

class CustomException extends Exception{ 

    protected $title; 

    public function __construct($title, $message, $code = 0, Exception $previous = null) { 

     $this->title = $title; 

     parent::__construct($message, $code, $previous); 

    } 

    public function getTitle(){ 
     return $this->title; 
    } 

} 

Se podría invocar este usando:

try{ 
    throw new CustomException("My Title", "My error message"); 
}catch(CustomException $e){ 
    print $e->getTitle()."<br />".$e->getMessage(); 
} 
+1

Gracias, Esta respuesta es impresionante. Con este ejemplo en mente, si quisiera pasar un título y solo el mensaje con la excepción ¿cómo lo haría? – Hailwood

+5

W3Schools no es propiedad de W3C, y en realidad es un recurso deficiente, ver http://w3fools.com para obtener información – BoltClock

+0

Lo siento, me perdí la parte de 'escuelas'. Sin embargo, creo que su guía sobre el manejo de excepciones fue una introducción lo suficientemente decente, pero voy a editar y cambiar a los documentos oficiales, por coherencia. –

3

En primer lugar, me gustaría recomendamos echar un vistazo a corresponding PHP manual page, es un buen lugar para comenzar. Además, puede echar un vistazo a la página Extending Exceptions - hay más información sobre la clase de excepción estándar y ejemplo de implementación de excepción personalizada

Si la pregunta es , cómo hacer alguna acción específica si se lanzó una excepción de un tipo particular, entonces solo tiene que especificar el tipo de excepción en la instrucción catch:

try { 
     //do some actions, which may throw exception 
    } catch (MyException $e) { 
     // Specific exception - do something with it 
     // (access specific fields, if necessary) 
    } catch (Exception $e) { 
     // General exception - log exception details 
     // and show user some general error message 
    } 
2

Pruebe esto como lo primero en su (s) página (s) php.

Captura errores y excepciones de php.

function php_error($input, $msg = '', $file = '', $line = '', $context = '') { 
    if (error_reporting() == 0) return; 

    if (is_object($input)) { 
     echo "<strong>PHP EXCEPTION: </strong>"; 
     h_print($input); 
     $title = 'PHP Exception'; 
     $error = 'Exception'; 
     $code = null; 
    } else { 
     if ($input == E_STRICT) return; 
     if ($input != E_ERROR) return; 
     $title = 'PHP Error'; 
     $error = $msg.' in <strong>'.$file.'</strong> on <strong>line '.$line.'</strong>.'; 
     $code = null; 
    } 

    debug($title, $error, $code); 

} 

set_error_handler('php_error'); 
set_exception_handler('php_error');