2010-07-29 23 views
3

J'essaie de travailler avec des exceptions.newbie: lancer une nouvelle exception - pouvons-nous changer le nom de l'exception?

J'ai donc quelque chose comme:

Si quelque chose de mauvais se produit:

throw new CreateContactException($codigo, $result->msg); 

Plus tard, je vais, essayer sinon ok, catch:

try 
{ 
    createContact(); 
} 
catch(CreateContactException $e) 
{ 
    $error .= 'An error occurred with the code:'.$e->getCode().' and message:'.$e->getMessage(); 
} 

1) Est-ce que cela fonctionnera? Je veux dire, ce getCode() et getMessage() ne sont pas liés avec les arguments CreateContactException sont-ils?

2) Dois-je, quelque part, une classe CreateContactException qui étend Exception? Je veux dire, pouvons-nous avoir des noms personnalisés pour nos exceptions sans avoir besoin de créer une classe étendue?

Merci beaucoup à l'avance, MEM

Répondre

12

Les exceptions doivent juste être sous-classes du haut-Exception classe, de sorte que vous pouvez créer un nouveau comme celui-ci:

class CreateContactException extends Exception {} 

Essayer de lancer d'autres les classes en tant qu'exceptions entraîneront une erreur.

Un avantage en utilisant des noms différents est que vous pouvez avoir plusieurs catch blocs, de sorte que vous pouvez attraper différents types d'exceptions et laisser les autres passent à travers:

try { 
    // do something 
} 
catch (CreateContactException $e) { 
    // handle this 
} 
catch (DomainException $e) { 
    // handle this 
} 
+0

Ok. Donc ce sera la première chose à faire. Créez une classe qui étend l'exception. Si ce sera vide, pourquoi ne pas simplement utiliser Exception? – MEM

+0

Supposons que nous ayons créé cette classe, comment pouvons-nous relier getCode et getMessage avec nos arguments throw? Je suis un peu perdu, je me rends compte que ... Merci encore MEM – MEM

+1

'pourquoi ne pas simplement utiliser Exception instead' Parce que vous voulez être et être plus précis en mesure de lancer et attraper types d'exceptions spécifiques. Comme il étend l'exception, il hérite de toutes les méthodes Exception, donc getCode et getMessage fonctionneront. – Mchl