-1

エラーが発生する確率が50:50のコードを取得しました。それはすべてクラスオブジェクトで行われます。オブジェクト内のメソッドはエラーを生成する可能性があります。メソッドスタックのどこかにある関数がエラーを生成し、実行された最初の関数に戻ることができるようにするにはどうすればよいですか?

次のようになります。1。function1を呼び出します。2。function1がfunction2を呼び出します。3。function2がfunction3を呼び出します。4。function3はエラーを生成し、エラー定義を含む配列をfunction1に配信します。

例外が正しいこと(try-catchブロックで関数をラップアラウンドする)は知っていますが、3関数のディープスタックで例外をキャッチさせることはできませんでした。それ、どうやったら出来るの?

4

3 に答える 3

2

何を試しましたか?それはかなり単純です。

<?php

function function1( ) {
    try {
        function2( );
    }
    catch( Exception $e ) {
        // Exception from function4 bubbles up.
    }
}

function function2( ) {
    function3( );
}

function function3( ) {
    function4( );
}

function function4( ) {
    throw new Exception( );
}
于 2012-09-13T13:39:46.227 に答える
0

例外はこれを行う正しい方法です。Catch Exception (一般クラス) は悪い習慣です。

具体的な/カスタム例外をスローする必要があります。

http://php.net/manual/en/spl.exceptions.phpを見てthrow、より具体的で具体的な例外で変更してください

避ける

 throw new Exception('foo');

その代わり

 throw new RuntimeException('foo');
于 2012-09-13T13:13:14.623 に答える
-2

try例外をキャッチし、他の例外を変更しないレベルで使用するだけです。元:

try{
function1();
}
catch(Exception e){
// bla bla
}

述べたように、例外はキャッチされるかクラッシュするまで伝播します:)。

于 2012-09-13T13:19:48.210 に答える