¿Debo lanzar una excepción desde el constructor?

40

Sé que puedo lanzar una excepción desde el constructor en PHP, ¿pero debería hacerlo? Por ejemplo, si el valor de un parámetro no es como lo esperaba.

O debería diferir lanzar una excepción hasta que se invoque un método. ¿Cuáles son las ventajas y desventajas en ambos casos?

    
pregunta WordsWorth 29.02.2012 - 11:55

5 respuestas

70

¿Por qué aplazarías el lanzamiento de la excepción?

Si sabe que el objeto no puede crear una instancia correcta con los parámetros dados, entonces definitivamente debería lanzar una excepción.

De lo contrario, alguien podría probar su objeto en busca de un valor nulo, lo que no será, y podría asumir que todo salió como se esperaba.

Se pueden hacer muchas cosas a su objeto sin tener que llamar a un método: se podría agregar a una lista, se podría comparar, se podría enviar como un parámetro, etc. etc. estas son cosas que no deberían haber ocurrido, considerando que no es un objeto válido.

    
respondido por el Andrei G 29.02.2012 - 11:59
20

Si se invoca a su constructor con uno o varios parámetros incorrectos, debe (debe?) lanzar una excepción. Si no lo hace, podría obtener un objeto defectuoso que no se comportará como se esperaba.

    
respondido por el Peter Kiss 29.02.2012 - 11:58
15

¡Absolutamente!

Debería lanzar la excepción si los parámetros para construir el objeto no son válidos o no según el contrato. No es una buena idea seguir adelante con el flujo, sabiendo que el objeto está construido con datos erróneos que pueden causar muchos problemas si permite que la persona que llama siga adelante.

Siempre es mejor "FALLO RÁPIDO Y FALLO TEMPRANO"

    
respondido por el java_mouse 29.02.2012 - 16:30
7
  

Sé que puedo lanzar una excepción desde el constructor en PHP, pero ¿debo hacerlo?

Esa es la única forma sensata de informar que la construcción del objeto falló.

    
respondido por el BЈовић 29.02.2012 - 20:32
2

¿Por qué no validarías el conjunto de parámetros antes de crear una instancia de tu objeto? Si lo hace, se aseguraría de que se creara su objeto, por lo tanto, eliminando cualquiera de los efectos secundarios que pueden ocurrir de su falla.

Aunque sé que puedes verificar las cosas en tu constructor y lanzar excepciones, prefiero escribir a mis constructores de tal manera que no fallen. Realizo la validación de parámetros antes de crear una instancia de los objetos que luego puedo lanzar excepciones sin que mis constructores fallen. Por lo general, tampoco trato de crear una instancia de nuevos objetos en mis constructores, sino que prefiero crear una instancia de ellos cuando los necesite.

Sólo mi opinión. PHP ofrece mucha libertad - ¡disfruta!

    
respondido por el Tony Mays 17.04.2013 - 15:49

Lea otras preguntas en las etiquetas