2012-11-07 104 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