Diferencia entre excepciones y errores?

¿Cuál es la diferencia entre un error y una excepción?

He leído numerosos recursos en línea y en un par de libros, pero las explicaciones proporcionadas no son muy exhaustivas. Como tal, todavía estoy confundido.

¡Gracias!

Editar: parece que hice dos preguntas, lo que probablemente sea confuso. La pregunta principal a la que quería responder es la diferencia entre errores y excepciones . Por lo tanto, he editado lo anterior para ser más específico. Gracias a todos por sus respuestas.

No hay una forma de “debería” o “la mejor” para manejar el error.

En términos generales, hay dos tipos de errores

  1. Aquellos que son manejados por otras partes del progtwig. El usuario nunca ve o conoce estos errores, al menos no de manera directa.
  2. Aquellos que han causado suficiente falla que el usuario necesita para estar informado como tal.

Tenga en cuenta que ninguno de estos tiene nada que ver con los mecanismos específicos de PHP que utilizaría para manejar los errores.

Si usa excepciones … Entonces recomiendo usar excepciones en todos los ámbitos. Registre un manejador de excepciones y deje que haga la mayor parte del trabajo, incluidos otros errores de PHP . ¿Detalles de acceso incorrectos?

class InvalidLoginException extends Exception { protected $message = 'Login information is incorrect. Please try again.'; } 

Entonces tienes un montón de opciones para la implementación.

 try { $user->login(); // will throw and InvalidLoginException if invalid } catch ( InvalidLoginException $e ) { // display an error message } 

O, si así lo desea, deje que el manejador de excepciones lo haga. Tal vez incluso de una manera más flexible

 class ApplicationErrorException extends Exception{} class InvalidLoginException extends ApplicationErrorException { protected $message = 'Login information is incorrect. Please try again.'; } 

Luego, en el manejador de excepciones

 if ( $exception instanceof ApplicationErrorException ) { // dislpay error message } 

Pero las excepciones no son la única forma, y para algunos ni siquiera se consideran una buena manera .

Ninguno. Las excepciones y errores son para cuando el código hace algo mal. Se espera más o menos que el usuario ingrese información de inicio de sesión incorrecta. Compruebe si el nombre de usuario / contraseña son correctos, de lo contrario, redirija al usuario a la página de inicio de sesión ( header('location:login.php?failed=1'); ) y luego si $_GET['failed'] está establecido, mostrar un mensaje Esa sería la forma más fácil.

Con respecto a las excepciones / errores … en general, debe apegarse a las excepciones. Lanzas una excepción, y luego la atrapas y la enfrentas. Creo que trigger_error es más para propagar el error al cliente cuando no sabes cómo manejar el error en un bloque catch.

Por un lado, las excepciones pueden continuar la ejecución del script. Además, trigger_error siempre informa la línea y el archivo en el que se invocó trigger_error.