PHPのTry/Catchブロックが例外をキャッチしない 質問する

PHPのTry/Catchブロックが例外をキャッチしない 質問する

このページからこの例 1 を実行しようとしています:http://php.net/manual/en/language.exceptions.php

<?php
function inverse($x) {
    if (!$x) {
        throw new Exception('Division by zero.');
    }
    return 1/$x;
}
try {
    echo inverse(5) . "\n";
    echo inverse(0) . "\n";
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}
// Continue execution
echo "Hello World\n";
?>

しかし、希望する出力の代わりに次の出力が得られます:

0.2
Fatal error: Uncaught exception 'Exception' with message 'Division by zero.' 
in xxx:
7 Stack trace: #0 xxx(14): inverse(0) #1 {main} thrown in xxx on line 7

私が使用している開発環境UniServer 3.5PHP 5.2.3

ベストアンサー1

それはおそらく名前空間問題。

という名前空間に例外がありA、スクリプトは という名前空間にありましたB。問題は、A\MyException(PHP で) が と等しいことでした\B\A\MyException(スクリプトが という名前空間にあるためB)。この問題を修正するには、例外名にバックスラッシュを追加して、次のようになるようにするだけでした\A\MyException

バックスラッシュがないと、Exception名前空間に固有のものとなり、キャッチされません。

おすすめ記事