2012-11-07 101 views
0

當我嘗試使用此代碼與Redis服務器連接時,如果服務器已啓動,則測試沒有任何問題。問題是服務器關閉時。在那種情況下,我用經典的Try/catch解決了這個情況。我的問題是我想用「my_custom_exception」類來管理這個異常,它有更多有用的功能,而不是類Exception。有沒有做這個?我知道如何擴展類Exception,但在這種情況下是第三部分的庫。我想在這種情況下引發另一種異常。 PHP

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

'catch(my_custom_exception $ e)' – Mike

+0

但在這種情況下,我需要拋出庫內部:throw new custom_exception(......),no ?.我正在嘗試 – itaka

+1

這取決於你想怎麼做。如果你想抓住它並在有回聲的地方處理它,你可以做我上面的。如果你想在別處處理異常,那麼你需要重新拋出它。 – Mike

回答

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 

    } 
} 

Beynond,我能想到的兩種方式......讓使用該包裝庫你正在使用的redis庫,但作爲一個intermidary - 這樣你就可以捕獲庫類中的泛型異常,然後拋出任何你想要的東西。

第二種方法是隻做一個自定義錯誤處理程序,捕獲未捕獲的異常 - 以某種方式檢查它們的redis,然後重新引發自定義異常。然而,在這一點上,你必須讓異常一直持續到執行結束,除非它只是格式化和輸出消息,否則不會給你許多處理它們的選項。

+0

我試過,但它不工作....我不知道如果我做得很好。 – itaka

+1

你知道你必須編寫'creatFromException'方法,對嗎?我只是以此爲例。 – prodigitalson

+0

是的,我的問題是,我不知道如何處理對象$ e,我在文檔中看到,但我看到只有構造函數具有「消息」,代碼和以前的異常,是以前的異常? – itaka