2010-10-26 12 views
3

c'est une question vraiment basique (j'espère). La plupart des exceptions que j'ai faites ont été avec C#. Dans C#, tout code qui contient des erreurs dans un bloc try catch est traité par le code catch. Par exemplePHP exception Handling vs C#

try 
{ 
int divByZero=45/0; 
} 
catch(Exception ex) 
{ 
errorCode.text=ex.message(); 
} 

L'erreur serait affichée dans errorCode.text. Si je devais essayer et exécuter le même code en PHP cependant:

try{ 
    $divByZero=45/0; 
    } 
catch(Exception ex) 
{ 
    echo ex->getMessage(); 
} 

Le code de capture n'est pas exécuté. Basé sur ma compréhension limitée, php a besoin d'un lancer. Cela ne va-t-il pas à l'encontre du but de la vérification des erreurs? Cela ne réduit-il pas un essai à une déclaration if then? si (en divisant par zéro) erreur de lancer S'il vous plaît dites-moi que je ne dois pas anticiper toutes les erreurs possibles dans un essai attraper avec un lancer. Si je le fais, y a-t-il un moyen de faire en sorte que le traitement des erreurs de php se comporte plus comme C#?

+0

Désolé si le formatage est éteint, en essayant de le réparer. – CountMurphy

+0

Division par zéro produit un avertissement, pas une exception - qui explique cela. – JAL

Répondre

6

Vous pouvez également convertir toutes vos erreurs php avec set_error_handler() et ErrorException en exceptions:

function exception_error_handler($errno, $errstr, $errfile, $errline) 
{ 
    throw new ErrorException($errstr, 0, $errno, $errfile, $errline); 
} 
set_error_handler("exception_error_handler"); 

try { 
    $a = 1/0; 
} catch (ErrorException $e) { 
    echo $e->getMessage(); 
} 
+0

Cela a fonctionné Great! Merci. – CountMurphy

+0

Est-ce que cela gérera tous les avertissements, ou seulement les erreurs réelles? – CountMurphy

+0

@CountMurphy: Toutes les erreurs, avertissements, notifications, etc. – zerkms

1

Je pense que la seule façon de traiter cela en PHP est d'écrire:

try 
{ 
    if ($b == 0) throw new Exception('Division by zero.'); 
    $divByZero = $a/$b; 
} 
catch(Exception ex) 
{ 
    echo ex->getMessage(); 
} 

Contrairement à C#, toutes les questions déclenche une exception en PHP. Certains problèmes sont ignorés silencieusement (ou pas en silence - ils impriment quelque chose à la sortie), mais il existe d'autres façons de les gérer. Je suppose que c'est parce que les exceptions ne faisaient pas partie du langage depuis la première version, donc il y a des mécanismes «hérités».

+0

Dang it. J'avais peur de ça. Cela semble juste ... horriblement guipé – CountMurphy

2

try-catch de PHP a été mis en œuvre plus tard dans la vie de la langue, et il applique uniquement aux exceptions définies par l'utilisateur.

Si vous voulez vraiment gérer erreurs réelles, set your own error handler.

Pour définir et attraper exceptions:

function oops($a) 
{ 
    if (!$a) { 
     throw new Exception('empty variable'); 
    } 
    return "oops, $a"; 
} 

try { 
    print oops($b); 
} catch (Exception $e) { 
    print "Error occurred: " . $e->getMessage(); 
}