将php异常重定向到更高级别的catch块

将php异常重定向到更高级别的catch块,php,exception-handling,try-catch,Php,Exception Handling,Try Catch,我试图将异常从特定的catch块传递到更一般的catch块。然而,它似乎不起作用。当我尝试以下操作时,出现500服务器错误。这可能吗 我意识到有一些简单的解决方法,但是说“嘿,我不想处理这个错误,让我们让更通用的异常处理程序来处理它”难道不是很正常吗 从技术上讲,这就是您要寻找的: try { try { //some soap stuff } catch (SoapFault $sf) { throw new Exception('

我试图将异常从特定的catch块传递到更一般的catch块。然而,它似乎不起作用。当我尝试以下操作时,出现500服务器错误。这可能吗

我意识到有一些简单的解决方法,但是说“嘿,我不想处理这个错误,让我们让更通用的异常处理程序来处理它”难道不是很正常吗


从技术上讲,这就是您要寻找的:

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());
}

不,使用异常来处理流控制是不正常的。也许人们需要检查下行投票的规则。如果某人正在做的是个坏主意,那么解释原因。如果这是一个格式不正确的问题,那么就投否决票——在某些情况下,你需要重新抛出一个例外。例如,如果您有一个类构造函数,并且在其中捕获了一个异常(例如,将错误记录到一个特殊文件),那么您必须重新显示该异常,以便也将错误通知构造调用方。
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());
}