2011-06-16 21 views
7

我正在尝试将异常从特定的catch块传递到更一般的catch块。但它似乎没有工作。当我尝试以下操作时,出现500服务器错误。这甚至有可能吗?重新启动php异常进入更高级别的catch块

我意识到有简单的解决方法,但说“嗨,我不想处理这个错误,让我们有更通用的异常处理程序来照顾它!

try { 
    //some soap stuff 
} 

catch (SoapFault $sf) { 
    throw new Exception('Soap Fault'); 
} 

catch (Exception $e) { 
    echo $e->getMessage(); 
} 
+0

不,使用异常来处理流量控制是不正常的。 – 2011-06-16 19:02:25

+0

很酷,谢谢你! – mrtsherman 2011-06-16 19:22:54

+4

也许人们需要审查downvoting的规则。如果某人在做什么是一个糟糕的主意,那么解释原因。如果这是一个严重形成的问题,然后downvote - http://meta.stackexchange.com/questions/33286/downvotes-versus-close-votes-on-questions – mrtsherman 2011-06-16 19:55:01

回答

7

从技术上讲这是你在找什么:

try { 
    try { 
     //some soap stuff 
    }  
    catch (SoapFault $sf) { 
     throw new Exception('Soap Fault'); 
    } 
} 
catch (Exception $e) { 
    echo $e->getMessage(); 
} 

但是我同意,例外不应使用流量控制。更好的方法是这样的:

function show_error($message) { 
    echo "Error: $message\n"; 
} 

try { 
    //some soap stuff 
}  
catch (SoapFault $sf) { 
    show_error('Soap Fault'); 
} 
catch (Exception $e) { 
    show_error($e->getMessage()); 
} 
+2

有些情况下,你需要重新抛出一个异常。例如,如果您有一个类构造函数并在其中捕获一个异常(例如,将该错误记录到特殊文件中),那么您必须重新引发该异常以通知构造调用者关于该错误。 – bernhardh 2013-06-10 14:48:34