Soy relativamente novato en PHP, pero me parece que el manejo de errores de PHP es un poco un ghetto, con errores y advertencias intercalados con excepciones (y no me enciende en die()
). Como tal, no estoy seguro de cuál es la mejor manera de crear, interpretar y manejar todos los casos de error en mi aplicación.¿Hay algún "inconveniente" con este enfoque para manejar errores en PHP?
Mi plan general de ataque es más o menos de la siguiente manera:
- convertir todas las advertencias/errores en Excepciones, utilizando
set_error_handler()
para envolver los errores como vienen. - Código de forma preventiva, comprobando de forma preventiva las cosas que espero que salgan mal. Lanzar excepciones solo cuando no puedo manejar el error directamente. Los bloques habituales de
try/catch
estarán en su lugar cuando sea necesario, para manejar excepciones que no me arrojo. - Envuelva toda mi aplicación (es decir, mi archivo de punto de entrada
index.php
) en su propiatry/catch
. Si eso falla, lanzaré unHTTP 500
y mostraré una página de error adecuada. Presumiblemente, esta página será un único archivo precompilado en lugar de una colección de encabezado/cuerpo/pie de página incluye, esto es en gran medida para que yo todavía pueda cubrir excepciones raras como un archivo de plantilla ilegible. Supongo que esta es la razón por la cual la página de error de 500 clases de Google se ve muy diferente de todo lo demás que publicaron. - Como corolario de los n. ° 2 y n. ° 3, dado que espero manejar todo por adelantado, si decido lanzar mi propia excepción, también espero no para detectar el error y, en su lugar, dejarlo burbujear todo el camino hasta mi controlador de nivel superior. El pensamiento aquí es que si no puedo manejarlo cuando sucede, probablemente esté mal equipado para manejarlo en cualquier otro lado. Estoy pensando en darles a estos errores su propia subclase, quizás
CriticalErrorException
, que se pueda identificar directamente en mis registros/generar un correo electrónico para que pueda verlo rápidamente. En general, espero que estos sean los elementos que pueden suceden en dev, pero deben ser resueltos por producción. - Cualquier error que llegue a la parte superior se registra en la base de datos, con conmutación por error a un archivo de registro. Los errores críticos, como se indicó anteriormente, desencadenan un correo electrónico. Si el informe falla en el archivo, es decir, hay un error en la base de datos, también se activará un correo electrónico.
Creo que esto cubre la mayoría de los casos bastante bien, pero como he dicho, soy muy nuevo en PHP, así que no sé si hay casos de esquina o comportamientos extraños que estoy pasando por alto.
¿Cuáles son los defectos en mi plan? ¿Cómo puedo superarlos?
Ese es un enfoque sólido, sí. – DanMan