2010-02-25 5 views
0

J'ai un code PHP qui devrait provoquer et attraper deux exceptions:PHP Try-Catch A défaut de Catch (pas un 'Avertissement')

try{ 
    @$this->connector->connect(); // Suppress the default warning (doesn't effect 'throw') 
} catch(BadArgumentException $e) {} // Works, no error, following code executes. 

try{ 
    @$this->connector->connect(array('user' => 'Doesn\'t exist', 'pass' => 'invalid')); 
} catch(AuthenticationException $e) {} // DOESN'T WORK - Passed to the exception handler. 

echo 'Not executed!'; // This isn't executed. 

Je l'ai essayé de les généralisant à catch(Exception $e) mais obtenir le même problème. .. aucune idée pourquoi.

Une aide?

+0

Quelle exception ou erreur génère-t-il? Êtes-vous sûr que ce n'est pas une erreur d'analyseur? – jasonbar

+0

Avez-vous essayé d'exécuter le code en dehors des blocs 'try'? Quelle exception est lancée? – thetaiko

+0

Je l'ai généralisé jusqu'à deux fonctions 'throw1()' et 'throw2()' qui lancent des exceptions et deux try/catch pour les exécuter ... et ça marche! Donc, doit être un problème à un niveau inférieur, désolé. – Minty

Répondre

1

OK j'ai découvert qu'il était un problème de l'espace de nommage: il semble PHP ne se plaint pas quand vous essayez de use un élément non-espaces de noms existant (dans ce cas use Framework\AuthenticationException vraiment quand je avais besoin use Framework\Connector\AuthenticationException). Le Peachy Tout est maintenant :)

Vive

0

Vous devez également savoir que l'utilisation @ est très lent en PHP. S'il vous plaît, s'il vous plaît, ne l'utilisez pas dans votre code de production.

+0

Pourriez-vous expliquer pourquoi @ est lent et devrait être évité? – pako

+0

Google "performance de suppression d'erreur php": http://www.phpdeveloping.co.za/error-handling/error-suppression-operator.html –

+0

Merci pour le conseil :) Ceci est seulement pour les tests si, j'essaie d'éviter suppression d'erreur dans le code 'réel'. – Minty

Questions connexes