Je sais que je peux lancer une exception du constructeur en PHP, mais dois-je le faire? Par exemple, si la valeur d'un paramètre n'est pas conforme à mes attentes.
Ou devrais-je différer le lancement d'une exception jusqu'à ce qu'une méthode soit invoquée. Quels sont les avantages et les inconvénients dans les deux cas?
Réponses:
Pourquoi voudriez-vous remettre à plus tard l'exception?
Si vous savez que l'objet ne peut pas instancier correctement avec les paramètres donnés, alors vous devriez certainement lever une exception.
Sinon, quelqu'un pourrait tester votre objet pour null, ce qui ne sera pas le cas, et supposer que tout s'est déroulé comme prévu.
Il y a beaucoup de choses qui peuvent être faites à votre objet sans appeler une méthode dessus: elle pourrait être ajoutée à une liste, elle pourrait être comparée, elle pourrait être envoyée comme paramètre, etc. etc. Toutes ces choses sont cela n'aurait pas dû arriver, considérant que ce n'est pas un objet valide.
la source
Si votre constructeur est appelé avec des paramètres incorrects, vous devriez (devez?) Renvoyer une exception. Si vous ne le faites pas, vous pourriez obtenir un mauvais objet qui ne se comportera pas comme prévu.
la source
Absolument!!
Vous devriez lever l'exception si les paramètres de construction de l'objet ne sont pas valides ou ne sont pas conformes au contrat. Ce n’est pas une bonne idée d’aller de l’avant avec le flux en sachant que l’objet est construit avec des données erronées, ce qui peut poser de nombreux problèmes si vous autorisez l’appelant à poursuivre.
Il vaut toujours mieux "échouer vite et échouer tôt"
la source
C’est le seul moyen sensé d’informer que la construction de l’objet a échoué.
la source
Pourquoi ne pas valider le jeu de paramètres avant d'instancier votre objet? Cela garantirait la création de votre objet, éliminant ainsi les effets secondaires pouvant en résulter.
Bien que je sache que vous pouvez vérifier les choses dans votre constructeur et lancer des exceptions, je préfère écrire mes constructeurs de manière à ce qu'ils n'échouent pas. J'effectue la validation des paramètres avant d'instancier des objets, ce qui me permet de lancer des exceptions sans que mes constructeurs échouent. De plus, je n'essaye généralement pas d'instancier de nouveaux objets dans mes constructeurs, mais plutôt de les instancier au besoin.
Juste mon avis. PHP offre beaucoup de liberté - profitez-en!
la source