2012-01-10 10 views
0

これはうまくいくはずです。私が何か間違っていると教えてください。私はそれが正常に動作しますループ内でスローを移動するが、それは私の目的に反した場合、PHPの例外 - スロー/キャッチがループを越えて動作しない

<?php 
try { 
    echo "start"; 
    throw new Exception("test"); 
    for ($index=0; $index < 1; $index++) { 
    echo "loop"; 
    } 
} catch (Exception $e){ 
    echo "caught $e"; 
} 
?> 

私がキャッチされない例外を取得しています:

は、ここでは、コードです。別のtry/catchブロックでハックすることもできますが、それはハックします。

5.2.13と5.2.17サーバーで試しました。現在の生産量は5.2.17であり、5.3.8でそれをテストしていません。なぜなら、アップグレードするためにホストに手を入れて、たくさんのコードを再テストする必要があるからです。

好きですか?

P.S. 私は例外とキャッチされない例外の違いを知っています。しかし、ここに結果があります:

start 
Fatal error: Uncaught exception 'Exception' with message 'test' in C:\UniServer\www\admin\water_ws\test.php:4 Stack trace: #0 {main} thrown in C:\UniServer\www\admin\water_ws\test.php on line 4 
+6

[viper7(5.2.15RC3-dev)](http://codepad.viper-7.com/KALRDl)と[codepad(5.2.5)](http://codepad.org/WPkjTxnn)...あなたはここに何か他のものがないと確信していますか?あなたが 'echo $ e'(Exceptionを文字列に変換する)という事実は、同様の出力をキャッチされないケースに表示することは役に立たないかもしれません。 – cmbuckley

+0

どのように動作していないのか詳しく説明できますか?それは "ループ"を印刷し、 "捕まえられたテスト"ではありませんか? – atxdba

+0

OPはいずれも示唆していません(キャッチされない例外)。しかし、私は 'catch $ e'は' Fatal error:Uncaught $ e'のように見えると思います。 – cmbuckley

答えて

0

として、それは離れて私のcatchブロックを最適化eAcceleratorのの "最適化" でした。 eAcceleratorを無効にすると、期待通りに動作します。

-1

なぜ$eオブジェクトをエコーし​​ますか? これを試してください:landonsが提案

try { 
    throw new Exception("test"); 
    for ($index=0; $index < 1; $index++) { 
     echo "loop"; 
    } 
} catch (Exception $e){ 
    echo $e->getMessage(); 
} 
+0

'echo $ e;'は 'Exception'クラスの' __toString() 'メソッドを呼び出します。このメソッドはスローされた例外の要点を返します。 –

関連する問題