Eu sei que posso lançar exceção do construtor em PHP, mas devo fazê-lo? Por exemplo, se o valor de um parâmetro não for o esperado.
Ou devo adiar o lançamento de uma exceção até que um método seja chamado. Quais são as vantagens e desvantagens de ambos os casos?
php
object-oriented
exceptions
exception-handling
WordsWorth
fonte
fonte
Respostas:
Por que você adiaria lançar a exceção?
Se você sabe que o objeto não pode instanciar adequadamente com os parâmetros fornecidos, você definitivamente deve lançar uma exceção.
Caso contrário, alguém pode testar seu objeto como nulo, o que não será, e pode assumir que tudo correu conforme o esperado.
Há muitas coisas que podem ser feitas no seu objeto sem a necessidade de chamar um método: ele pode ser adicionado a uma lista, comparável, enviado como parâmetro, etc, etc. etc. isso não deveria ter acontecido, considerando que não é um objeto válido.
fonte
Se seu construtor for chamado com parâmetros ruins, você deve (deve?) Lançar uma exceção. Caso contrário, você poderá obter um objeto ruim que não se comportará conforme o esperado.
fonte
Absolutamente!!
Você deve lançar a exceção se os parâmetros para a construção do objeto não forem válidos ou não conforme o contrato. Não é uma boa idéia prosseguir 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 "FALAR RÁPIDO E FALHAR ANTES"
fonte
Essa é a única maneira sensata de informar que a construção do objeto falhou.
fonte
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, prefiro escrever meus construtores de tal maneira que eles não falhem. Realizo a validação de parâmetros antes de instanciar objetos, para que eu possa lançar exceções sem que meus construtores falhem. Eu também geralmente não tento instanciar novos objetos em meus construtores, optando por instancia-los conforme necessário.
Apenas minha opinião. PHP oferece muita liberdade - divirta-se!
fonte