2015-02-17 188 views
0

考慮下面的代碼,由cron運行:異常終止程序?

try { 
    $count = $stmt->execute ($queryArray); 
} 
catch (PDOException $ex) { 
    fwrite ($fp, ' "exception" at line: ' . (__LINE__ - 3). ", " . $ex -> getMessage() . "\n"); 
    throw new RuntimeException (
     basename (__FILE__) . '::' . __METHOD__ . ' - Execute query failed: ' . $ex -> getMessage() ); 
} 

重新投擲由throw new RuntimeException導致程序停止?換句話說,語句是否會充分「捕捉」異常並允許程序繼續?

throw文檔含糊不清。唯一的參考是PHP Fatal Error(link to) PHP Exceptions:後面的語句

當一個異常被拋出,代碼不會被執行,而PHP就會嘗試查找第一個匹配的catch塊。如果沒有捕獲到異常,除非使用set_exception_handler()定義了處理程序,否則將發出一個PHP致命錯誤,並帶有「Uncaught Exception ...」消息。

回答

0

重新拋出拋出new RuntimeException導致程序停止?

是的,因爲根據文件沒有匹配的捕獲。爲了繼續執行,你需要用嵌套try/catch這通常不是一個好主意catch第二異常(RuntimeException):

try { 
    // something with PDO that generates an exception 
} catch (PDOException $e) { 
    // do some stuff 
    try { 
     throw new RuntimeException(); 
    } catch (RuntimeException()) { 
    // do something else 
    } 
} 

換句話說,會捕捉& FWRITE陳述足夠「捕獲「異常並允許程序繼續?

如果你想繼續使用該程序,那麼你將不需要拋出第二個異常。但是,在拋出異常之前發生的任何事情都會發生。因此,在您的示例中,fwrite仍然會發生,遇到RuntimeException時程序會停止。

+0

你是什麼意思:'然而,在你拋出異常之前發生的事情就會發生。所以在你的例子中,frwite仍然會發生......'(錯別字?)我希望這句話能夠爲我解決這個問題。 – David 2015-02-17 22:51:57

+0

是的,錯誤的's /和東西/任何東西' - 在答案中更正。 – prodigitalson 2015-02-17 23:08:32