Nota: En primer lugar, me doy cuenta de que el 99% de los desarrolladores de PHP usan el operador de supresión de errores (solía ser uno de ellos), así que estoy esperando que cualquier desarrollador de PHP lo vea en desacuerdo.
En su opinión, ¿es siempre válido utilizar el operador @ para suprimir un error/advertencia en PHP mientras que usted puede estar manejando el error?
Respuesta corta:
No!
más larga respuesta más correcta:
no sé como yo no lo sé todo, pero hasta ahora no me he encontrado con una situación en la que era una buena solución.
Por qué es malo:
En lo que creo que es de aproximadamente 7 años usando PHP ahora he visto agonía sin fin depuración causado por el operador supresión de errores y nunca he encontrado con una situación en la que era inevitable.
El problema es que la pieza de código para la que está suprimiendo los errores, actualmente solo puede causar el error que está viendo; sin embargo, cuando cambia el código en el que se basa la línea suprimida, o el entorno en el que se ejecuta, entonces hay muchas posibilidades de que la línea intente generar un error completamente diferente al que estaba tratando de ignorar. Entonces, ¿cómo rastrear un error que no está dando salida? Bienvenido a depurar el infierno!
Me tomó muchos años darme cuenta de cuánto tiempo estaba perdiendo cada dos meses debido a errores suprimidos. Muy a menudo (pero no exclusivamente) esto fue después de instalar un script/aplicación/biblioteca de un tercero que no contenía errores en el entorno de desarrolladores, pero no mía debido a una diferencia de configuración de servidor o php o dependencia faltante que normalmente generaría un error inmediatamente alertando sobre el problema, pero no cuando el desarrollador agrega la magia @.
Las alternativas (dependiendo de la situación y resultado deseado):
controlar el error real que usted está enterado de, por lo que si una pieza de código va a causar un cierto error entonces no se ejecuta en esa situación particular. Pero creo que obtienes esta parte y te preocupaba que los usuarios finales vean errores, que es lo que ahora abordaré.
Para los errores habituales, puede configurar un manejador de errores para que salgan de la forma que desee cuando está viendo la página, pero ocultos para los usuarios finales y registrados, para saber qué errores están desencadenando los usuarios.
En los errores fatales, configure display_errors
como desactivado (su manejador de errores aún se desencadena) en su php.ini y habilite el registro de errores. Si tiene un servidor de desarrollo, así como un servidor en vivo (que recomiendo), este paso no es necesario en su servidor de desarrollo, por lo que aún puede depurar estos errores fatales sin tener que recurrir a buscar el archivo de registro de errores. Incluso hay un trick using the shutdown function para enviar una gran cantidad de errores fatales a su controlador de errores.
En resumen:
Por favor, evitarlo. Puede haber una buena razón para ello, pero todavía tengo que ver uno, por lo que hasta ese día es mi opinión que el operador de supresión de errores (@) es malo.
Puede leer my comment on the Error Control Operators page en el manual de PHP si desea más información.
Su ejemplo no funciona; "Archivo no encontrado" no es la única forma en que fopen() puede fallar. Quizás el archivo no sea legible. Tal vez está abierto por otro proceso. Las condiciones de error dependen de la plataforma y, de todos modos, es posible que no desee perder tiempo pensando en casos de error. –
ver también: http://stackoverflow.com/questions/1087365 – dreftymac
y ¿por qué se cierra esta pregunta? – GOD