我目前有以下PHP,它使用try / catch块检查异常。
try {
$obj->login('User', 'Pass');
$obj->joinServer('Server');
} catch(ConnectionException $objException){
die();
}
...这是ConnectionException类:
class ConnectionException extends Exception {
public function __construct($strError, $intError, $mixOther = null){
$this->strError = $strError;
$this->intError = $intError;
echo $this->intError, ' - ', $this->strError, chr(10);
}
}
现在让我们假设“catch”部分返回特定错误(如果ConnectionException
输出特定消息),我该如何再次“重试”try / catch?
答案 0 :(得分:0)
我想你可以嵌套try/catch
,将代码包装成函数以避免代码重复:
function login($obj){
$obj->login('User', 'Pass');
$obj->joinServer('Server');
}
try {
login($obj);
} catch(ConnectionException $objException){
try {
login($obj);
} catch(ConnectionException $objException){
die();
}
}
答案 1 :(得分:0)
如果你想在这个级别执行此操作,而不是每次都抛出一个ConnectionException
,抛出一个不同的异常,即ConnectionException
的子类,表示你想要什么时候重新运行逻辑。然后,将try
中的逻辑封装到函数中,然后再次调用它。
try {
doWork( $obj);
} catch( ConnectionTimeoutException $e) {
// Wait a bit, then retry
try {
sleep(10);
doWork( $obj);
} catch( ConnectionException $e) {
// Because of the subclass, this would catch both ConnectionException and ConnectionTimeoutException
die();
}
} catch( ConnectionException $e) {
die();
}
您还可以更改您调用此功能的方式,并根据ConnectionException
的结果调用两次。虽然,以这种方式,将此决定建立在返回值而不是异常上可能更有意义。
答案 2 :(得分:0)
我的建议是创建一个简单的while循环来检查条件:
try_connection = true;
while(try_connection) {
try {
$obj->login('User', 'Pass');
$obj->joinServer('Server');
} catch(ConnectionException $objException){
if(!specific_message)
try_connection = false;
}
}