Le bloc Try/Catch en PHP ne peut pas détecter les situations d'exception
P粉226413256
2023-08-22 15:19:37
<p>J'essaie d'exécuter cet exemple n°1, à partir de cette page : http://php.net/manual/en/lingual.exceptions.php</p>
<pre class="brush:php;toolbar:false;"><?php
fonction inverse($x) {
si ($x) {
throw new Exception('Division par zéro.');
}
renvoie 1/$x ;
}
essayer {
echo inverse(5) .
echo inverse(0) .
} catch (Exception $e) {
echo 'Exception détectée : ', $e->getMessage(), "n";
}
// Continuer l'exécution
echo "Bonjour tout le monde" ;
?>≪/pré>
<p>Cependant, le résultat que j'obtiens n'est pas attendu : </p>
<pre class="brush:php;toolbar:false;">0.2
Erreur fatale : exception non interceptée « Exception » avec le message « Division par zéro ».
inxxx :
7 Trace de pile : #0 xxx(14) : inverse(0) #1 {main} lancé dans xxx à la ligne 7</pre>
<p>Les environnements de développement que j'utilise sont <code>UniServer 3.5</code> et <code>PHP 5.2.3</code></p>
Je viens de rencontrer exactement ce problème, j'ai l'impression d'avoir même copié le nom de l'exception mais je ne l'attrape pas. Cela s'avère être une erreur stupide de ma part, mais j'ai pensé publier ma situation ici au cas où quelqu'un d'autre serait dans la même situation.
Mon exception s'appelle A dans mon espace de noms et le script s'appelle B dans un espace de noms. Le problème est que j'ai une AMyException qui est égale (en PHP) à BAMyException (car mon script s'appelle B dans l'espace de noms !). Tout ce que j'avais à faire était d'ajouter une barre oblique inverse (ou quel que soit son nom) avant le nom de l'exception pour la corriger afin qu'elle ressemble à ceci : AMyException