working try not exceptions custom catch all php exception exception-handling error-handling

not - try catch php laravel



PHP-Convirtiendo todos los errores en excepciones-¿Bueno o malo? (3)

Me preguntaba si se considera una mala práctica convertir globalmente todos los errores de PHP en excepciones. Se utilizaría algo como lo siguiente:

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

Supongo que se supone que puedes comenzar a usar "probar / atrapar" alrededor de ciertas piezas de código que normalmente arrojarían errores.

Si no es un caso de bueno / malo, ¿cuáles son algunos de los Gotchas que podrían surgir de esta práctica?


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

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


Después de haber trabajado muchos años en Java / .Net en el pasado y ahora php en los últimos años, es realmente molesto tener todas estas diversas convenciones de error, mientras que el Patrón de excepciones es realmente bueno para todo, comenzando desde errores de nivel de aplicación, errores de clase, hasta Errores del sistema - cualquier cosa.

Realmente invierto mucho trabajo en tratar de gestionar todo tipo de errores, porque cada biblioteca / funciones maneja los errores de manera diferente.


Use excepciones para las cosas que realmente están fuera 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 porque ocurre cuando es algo que el usuario o la aplicación no pueden controlar. No se puede abrir el archivo porque? Podría haber muchas razones.

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

En pocas palabras, utilice excepciones cuando no pueda controlar lo que está probando. Recuerde que las excepciones tienen más sobrecarga que trigger_error también :)