0

このコードを使用して Redis サーバーに接続しようとすると、サーバーが稼働しているかどうかのテストに問題はありません。問題は、サーバーがダウンしている場合です。その場合、私はこの問題を従来の Try/catch で解決しました。私の問題は、クラス Exception ではなく、より便利な機能を持つ "my_custom_exception" クラスでこの例外を管理したいということです。これを作る方法はありますか?クラスExceptionを拡張する方法は知っていますが、この場合はサードパーティのライブラリです。

function show_status_redis_server(){
    try{
        $redis = RedisDB::fetch_instance();//this ...........................
    }catch(Exception $e){
        echo "Redis server is down"; 
    }
}
4

1 に答える 1

2

@Mike がコメントで述べているように、機能をどこで利用するかによって異なります。最も簡単なのは、クラスを使用してコードで処理することです。

function show_status_redis_server(){
    try{
        $redis = RedisDB::fetch_instance();//this ...........................
    }catch(Exception $e){
        throw MyRedisException::createFromException($e); 

    }
}

また

function show_status_redis_server(){
    try{
        $redis = RedisDB::fetch_instance();//this ...........................
    }catch(Exception $e){
        $re = MyRedisException::createFromException($e);
        // do stuff with $re here 

    }
}

私が2つの方法を考えることができることを超えて...使用しているredis libを使用するラッパーライブラリを作成しますが、中間として機能します-この方法では、ライブラリクラスで一般的な例外をキャッチし、必要なものをスローできます。

2番目の方法は、キャッチされていない例外をキャッチするカスタムエラーハンドラーを実行することです-何らかの方法でredisを検査してから、カスタム例外を再スローします。ただし、その時点で、メッセージをフォーマットして出力するだけでない限り、例外を処理するための多くのオプションが提供されない実行の最後まで例外を通過させる必要があります。

于 2012-11-08T00:09:07.683 に答える