2009-06-10 19 views
16

Me preguntaba si se considera una mala práctica convertir globalmente todos los errores de PHP en excepciones. Algo así como lo siguiente sería utilizado:PHP - Convertir todos los errores en excepciones - ¿Bueno o malo?

function exception_error_handler($errno, $errstr, $errfile, $errline) { 
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline); 
    return false; 
} 

supongo que el supuesto es que sólo puede empezar a utilizar "try/catch" en torno a ciertas piezas de código que normalmente generan errores.

Si no es un caso de Bueno/Malo, ¿cuáles son algunas de las cosas que pueden surgir de esta práctica?

Respuesta

8

Lamentablemente, esto no funcionará en fatal/parse/etc. errores ...

No lo recuerdo exactamente, pero lo he intentado y en algunos casos recibí un mensaje como "no puedo lanzar una excepción sin solución ..." pero no recuerdo las condiciones para obtener este resultado. Pero ahora lo uso de esta manera y completamente satisfecho.

+0

Esta respuesta parece ser la que más entiende la pregunta, al menos desde el momento de su aceptación. Desprecio responder mis propias preguntas, pero tal vez regrese más tarde. –

2

Use excepciones para cosas que realmente están más allá de su control.

bueno:

try { 
    if (fopen('file.txt', 'w') === false) { 
     throw new Exception('File could not be opened for write access.'); 
    } 
} catch (Exception $e) { 
    echo $e->getMessage(); 
} 

malo:

try { 
    if (strlen($_POST['username']) < 5) { 
     throw new Exception('Username too short'); 
    } 
} catch (Exception $e) { 
    echo $e->getMessage(); 
} 

La primera forma es buena, ya que se produce cuando es algo que el usuario o el control de aplicaciones no puede. No puede abrir el archivo porque? podrían ser muchas razones

La segunda forma es un uso excesivo de try/catch cuando debe usar trigger_error. La segunda forma es que el usuario no conozca las reglas de la validación del nombre de usuario.

En pocas excepciones de uso cuando no puede controlar lo que su prueba. Recuerde que las excepciones tienen más sobrecarga que trigger_error aswell :)

+1

Por lo general, hay errores que solo queremos mostrar al usuario, y errores que se deben registrar, mostrando al usuario solo algo. como este "Error interno n. ° 123. Póngase en contacto con el servicio de asistencia técnica". En este modelo, las clases de excepción están bastante formalizadas para lograr este resultado. Por lo tanto, el primer ejemplo debe registrarse, pero el segundo solo para el usuario y deberían ser, por ejemplo. SystemException y UserException ... Bueno, no estoy seguro si el segundo exapmle es "uso excesivo". – Jet

+0

puede que no parezca exagerado al principio, pero luego debe pensar en los problemas de rendimiento. Un objeto se crea cada vez que ocurre una excepción. Si bien eso en sí mismo no es lento, no es tan rápido como llamar a algo como trigger_error. y el segundo ejemplo no necesita una captura de prueba. Solo agrega a la sobrecarga y cuando una página como esta recibe miles de visitas por día, la pérdida de rendimiento es notable :) Yo personalmente nunca uso try catch porque no veo el uso para ello. – Ozzy

+6

2013 está aquí. Los recursos de la computadora ya no son un problema.Si su única preocupación contra el uso de Excepciones es un nuevo objeto, entonces probablemente esté usando un lenguaje de programación incorrecto. – Gajus

1

habiendo trabajado muchos años en Java/.Net en el pasado y ahora php en los últimos años, es realmente molesto tener todas estas varias convenciones de error, mientras que el Patrón de Excepciones es realmente bueno para todo, desde errores de nivel de aplicación, errores de clase, hasta errores de sistema, cualquier cosa.

Realmente invierto bastante trabajo tratando de administrar todo tipo de tipos de errores, porque cada biblioteca/funciones maneja los errores de manera diferente.

Cuestiones relacionadas