PHP の Try/Catch ブロックが例外状況をキャッチできない
P粉226413256
2023-08-22 15:19:37
<p>このページからこの例 #1 を実行しようとしています: http://php.net/manual/en/ language.Exceptions.php</p>
<pre class="brush:php;toolbar:false;"><?php
逆関数($x) {
if (!$x) {
throw new Exception('ゼロ除算。');
}
1/$x を返します。
}
試す {
エコーインバース(5) . "n";
エコーインバース(0) . "n";
} catch (例外 $e) {
echo '例外をキャッチしました: ', $e->getMessage(), "n";
}
// 実行を継続します
「Hello Worldn」をエコーします。
?></pre>
<p>ただし、得られる出力は期待どおりではありません: </p>
<pre class="brush:php;toolbar:false;">0.2
致命的なエラー: キャッチされない例外「例外」とメッセージ「ゼロ除算」。
inxxx:
7 スタック トレース: #0 xxx(14): inverse(0) #1 {main} が 7</pre> 行目の xxx にスローされました。
<p>私が使用する開発環境は <code>UniServer 3.5</code> および <code>PHP 5.2.3</code></p> です。
まさにこの問題に遭遇しました。例外の名前をコピーしただけなのに、それがキャッチされないような気がします。私の愚かな間違いであることが判明しましたが、他の誰かが同じ状況に陥った場合に備えて、私の状況をここに投稿したいと思いました。
私の例外は私の名前空間では A と呼ばれ、スクリプトは 1 つの名前空間で B と呼ばれます。問題は、(PHP で) \B\A\MyException と等しい A\MyException があることです (スクリプトが名前空間 # で B# と呼ばれているため) #!)。例外名の前にバックスラッシュ (またはその名前) を追加して次のように修正するだけでした: \A\MyException