devo jogar exceção do construtor?

43

Eu sei que posso jogar exceção do construtor no PHP, mas devo fazer isso? Por exemplo, se o valor de um parâmetro não é como eu esperava.

Ou devo adiar o lançamento de uma exceção até que um método seja chamado. Quais são as vantagens e desvantagens em ambos os casos?

    
por WordsWorth 29.02.2012 / 11:55
fonte

5 respostas

73

Por que você adiaria a exceção?

Se você sabe que o objeto não pode instanciar corretamente com os parâmetros fornecidos, então você deve definitivamente lançar uma exceção.

Caso contrário, alguém pode testar seu objeto para null, o que não será, e pode assumir que tudo correu como esperado.

Há muitas coisas que podem ser feitas no seu objeto sem chamar um método: ele pode ser adicionado a uma lista, pode ser comparado, pode ser enviado como um parâmetro, etc. etc. etc. estas são coisas que não deveriam ter acontecido, considerando que não é um objeto válido.

    
por 29.02.2012 / 11:59
fonte
21

Se o seu construtor é chamado com parâmetro (s) inválido (s), então você deve (deve?) lançar uma exceção. Se você não fizer isso, poderá obter um objeto inválido que não se comportará como esperado.

    
por 29.02.2012 / 11:58
fonte
17

Absolutamente !!

Você deve lançar a exceção se os parâmetros para construir o objeto não forem válidos ou não conforme o contrato. Não é uma boa ideia seguir em frente com o fluxo, sabendo que o objeto é construído com dados incorretos, o que pode causar muitos problemas, se você permitir que o chamador prossiga.

É sempre melhor "FALHAR RÁPIDO E FALHAR COM ANTECEDÊNCIA"

    
por 29.02.2012 / 16:30
fonte
7

I know I can throw exception from constructor in PHP but should I do it?

Essa é a única maneira sensata de informar que a construção do objeto falhou.

    
por 29.02.2012 / 20:32
fonte
2

Por que você não validaria o conjunto de parâmetros antes de instanciar seu objeto? Fazer isso garantiria que seu objeto fosse criado, removendo assim qualquer um dos efeitos colaterais que possam ocorrer devido a sua falha.

Embora eu saiba que você pode verificar as coisas em seu construtor e lançar exceções, eu prefiro escrever meus construtores de tal forma que eles não falhem. Eu executo a validação de parâmetros antes de instanciar objetos, os quais posso então lançar exceções sem que meus construtores falhem. Eu também geralmente não tento instanciar novos objetos em meus construtores, optando por instanciá-los conforme eu preciso deles.

Apenas minha opinião. PHP oferece muita liberdade - aproveite!

    
por 17.04.2013 / 15:49
fonte