Sé que puedo lanzar una excepción del constructor en PHP, pero ¿debería hacerlo? Por ejemplo, si el valor de un parámetro no es como lo esperaba.
¿O debería aplazar el lanzamiento de una excepción hasta que se invoque un método? ¿Cuáles son las ventajas y desventajas en ambos casos?
php
object-oriented
exceptions
exception-handling
WordsWorth
fuente
fuente
Respuestas:
¿Por qué posponer lanzar la excepción?
Si sabe que el objeto no puede crear instancias correctamente con los parámetros dados, entonces definitivamente debe lanzar una excepción.
De lo contrario, alguien podría probar su objeto como nulo, lo que no será, y podría asumir que todo salió como se esperaba.
Hay muchas cosas que se pueden hacer a su objeto sin invocar un método: se puede agregar a una lista, se puede comparar, se puede enviar como parámetro, etc., etc. Todas estas son cosas eso no debería haber sucedido, considerando que no es un objeto válido.
fuente
Si su constructor se invoca con parámetros incorrectos, entonces debería (¿debe?) Lanzar una excepción. Si no lo hace, podría obtener un objeto malo que no se comportará como se esperaba.
fuente
¡¡Absolutamente!!
Debe 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 incorrectos que pueden causar muchos problemas si permite que la persona que llama continúe.
Siempre es mejor "FALLO RÁPIDO Y FALLO TEMPRANO"
fuente
Esa es la única forma sensata de informar que la construcción del objeto falló.
fuente
¿Por qué no validarías el conjunto de parámetros antes de instanciar tu objeto? Si lo hace, se aseguraría de que su objeto se crearía, eliminando así cualquiera de los efectos secundarios que pueden ocurrir por su falla.
Aunque sé que puede verificar las cosas en su constructor y lanzar excepciones, prefiero escribir mis constructores de tal manera que no fallen. Realizo la validación de parámetros antes de crear instancias de objetos que luego puedo lanzar excepciones sin que mis constructores fallen. Por lo general, tampoco trato de crear instancias de nuevos objetos en mis constructores, sino que prefiero crearlos cuando los necesito.
Solo es mi opinión. PHP ofrece mucha libertad, ¡disfrútalo!
fuente