2013-05-31 37 views
0

假設一個具有下面的代碼:自動捕獲的異常會發生什麼?

try { 
    $i = 0; 
    while ($i < 10) { 
     if ($i == 7) { 
      throw new Exception("Test exception"); 
     } 
     $i++; 
    } 
} catch (Exception $e) { 
} 
print($i); 

這將返回7。當try塊中的第一個異常被捕獲時,程序將執行catch塊,然後繼續在該塊之下(而不是?)。

但是,當我設置自動異常處理程序(使用set_exception_handler())時會發生什麼?當我運行此代碼時,我沒有得到返回值:

function the_handler($e) { 
} 
set_exception_handler('the_handler'); 
$i = 0; 
while ($i < 10) { 
    if ($i == 7) { 
     //throw new Exception("Test exception"); 
    } 
    $i++; 
} 
print($i); 

這是爲什麼?調用異常處理程序後會發生什麼?

+0

'set_exception_handler()'不會'捕捉'異常,它會在遇到* uncaught *異常之後定義PHP的行爲。通常這意味着優雅地失敗,並且不會向用戶顯示堆滿您可能不想公開的數據的堆棧跟蹤。 – Sammitch

+0

@Sammitch是的,這是我的不好,英語不是我的母語。 – Keelan

回答

1

PHP manual說:在exception_handler被稱爲後

將停止執行。

有關許多特殊情況,請參閱手冊頁上的討論,例如,當你在異常處理程序中拋出異常時。

+0

嗯,我完全錯過了。道歉! (我想沒有解決方法?) – Keelan

+0

@CamilStaps IMO它提供一種解決方法沒有意義,因爲如何處理異常特定於它所在的流程。 try ... catch結構是從異常中恢復的更好的工具。 – gzm0

+0

@ gzm0全心全意同意......這只是讓你輕鬆做錯事(口袋妖怪異常處理) – Orangepill

相關問題