Comment traiter les exceptions dans le constructeur le mieux?
Comment traiter l'exception de la meilleure façon de construire?
option1 - catch exception, où l'objet créé:
class Account {
function __construct($id){
if(empty($id)){
throw new My_Exception('id can\'t be empty');
}
//...
}
}
class a1 {
function just($id){
try {
$account = new Account($id);
}
catch(Exception $e){
$e->getMessage();
}
}
class a2{
function just($id){
try {
$account = new Account($id);
}
catch(Exception $e){
$e->getMessage();
}
}
option2: capture d'exception à l'intérieur de __construct
class Account{
function __construct($id){
try{
if(empty($id)){
throw new My_Exception('id can\'t be empty');
}
//...
}
catch(My_Exception $e) {
}
}
S'il vous plaît écrire dans les cas qui doivent être utilisés option1 et qui doit être utilisé option2 ou d'autres de meilleure solution.
Grâce
Je ne suis pas de vote pour le fermer car je ne suis pas sûr que tous les détails de votre question, mais en voici une très étroitement liés l'un: stackoverflow.com/questions/2685857/php-exceptions-in-classes (personnellement, j'aime la méthode alternative @Gordon présente dans sa réponse à l'aide de
merci du link!
::create()
meilleur)merci du link!
OriginalL'auteur Yosef | 2010-09-05
Vous devez vous connecter pour publier un commentaire.
Bien sûr, vous devez gérer une exception est levée dans une fonction en dehors de cette fonction, sinon il ne fera pas de sens. En ce qui concerne les constructeurs spécifiquement, essayez d'éviter de "nouvelle classe", autant que possible, et s'en tenir à générateur de fonctions à la place. Pour chaque classe X, décidez de la classe est responsable de la création des objets de la classe X, et ajouter un générateur de fonction à la classe. Ce générateur de fonction est aussi l'endroit idéal pour gérer les X du constructeur exceptions
OriginalL'auteur user187291
Quel est le but de lancer une exception et immédiatement l'attraper? Si vous souhaitez annuler une fonction d'erreur mais pas de jeter une erreur, vous devez
return
.Ainsi, votre premier code est toujours correct. Laissez l'Exception de la bulle.
return
à partir d'un constructeur en PHP.Vous pouvez retourner, il suffit de ne pas retourner une valeur (
return;
).Je suis conscient que vous pouvez retourner, mais le retour d'une valeur à ne pas faire n'importe quoi (à moins que vous appelez le constructeur directement, PHP permet, qui a encouragé certains mauvaise programmation). J'ai tort de lire votre réponse que de recommander de retourner l'erreur au lieu de la jeter.
OriginalL'auteur NikiC