2010-09-17 15 views
5

En algunas bibliotecas es una práctica común para hacer clases de excepciones personalizadas para cualquier condición de error, como:¿Cuál es el punto de usar una clase de excepción personalizada en php?

class FileNotFound_Exception extends Exception {} 

Puede manejar cierto tipo de excepción, sin embargo no se puede leer todo el código fuente de todas las bibliotecas de recordar todas las excepciones clase, y no puede aprovechar al máximo el uso de excepciones personalizadas. La mayor parte del tiempo yo sólo la captura de ellos con base de clase de excepciones:

catch (Exception $e) 
{ 
    // log and display friendly error 
} 

¿Hay otras maneras de tener beneficio de las clases de excepción personalizada, sin tener que escribir larga lista de bloques catch? Me gustan las excepciones, pero no sé cómo usarlas correctamente. Gracias.

+3

* (artículo) * [Blog de Ralph Schindler: Mejores prácticas de excepción en PHP5.3] (http://ralphschindler.com/2010/09/15/exception-best-practices-in-php-5-3) – Gordon

Respuesta

8

La ventaja de tener su propia clase de excepción es que usted, como autor de la biblioteca, puede atraparla y manejarla.

try { 
    if(somethingBadHappens) { 
    throw MyCustomException('msg',0) 
    } 
} catch (MyCustomException $e) { 
    if(IcanHandleIt) { 
    handleMyCustomException($e); 
    } else { 
    //InvalidArgumentException is used here as an example of 'common' exception 
    throw new InvalidArgumentException('I couldnt handle this!',1,$e); 
    } 
} 
7

Bueno, las clases de excepciones personalizadas le permiten enviar sus errores correctamente para un mejor manejo.

si tiene una clase

class Known_Exception extends Exception {} 

y un bloque intento de captura de esta manera:

try { 
    // something known to break 
} catch (Known_Exception $e) { 
    // handle known exception 
} catch (Exception $e) { 
    // Handle unknown exception 
} 

entonces usted sabe que Excepción $ e es una situación de error desconocido y puede manejar que, en consecuencia, y eso es bastante útil para mí.

Cuestiones relacionadas