2016-08-12 114 views
2

我正在編寫一個簡單的PHP代碼,用於通過郵件列表從MySQL表發送電子郵件;
我盡我所能防止錯誤發生,驗證字段並盡我所能防止錯誤發生。錯誤發生後繼續執行代碼,稍後在PHP中處理它們?

我打算使用foreach循環來發送每個電子郵件的名稱和其他相關信息,但我擔心由於某種原因,某些電子郵件或名稱可能會引發錯誤並停止我的代碼在名單的中途,讓我無法知道它停在哪裏。

我想知道是否有辦法跳過有問題的行並繼續發送電子郵件,然後顯示有關發送失敗的行的詳細信息。

我認爲我可以使用Try/Catch,但是我找不到如果我能在異常後繼續執行代碼,並且無法找到如何在最後顯示錯誤消息。

如果這不是處理可能的錯誤的好方法,那麼最好的方法是什麼?

在此先感謝!

回答

1

try/catch一定會爲這個工作。由於您特別關注異常後繼續執行,請記住try區塊中包含的內容。例如:

$array = [1, 2, 3, 'string', 5, 6]; 

try { 
    foreach ($array as $number) { 
     if (is_string($number)) throw new Exception("Not a number", 1);    
     echo $number; 
    } 
} catch (Exception $e) { 
    echo $e->getMessage(); 
} 

與此代碼,你會看到

123Not一些

因爲處理異常後,執行將catch塊後繼續進行,而不是在點拋出異常。

然而,與foreach循環

foreach ($array as $number) { 
    try { 
     if (is_string($number)) throw new Exception("Not a number", 1);    
     echo $number; 
    } catch (Exception $e) { 
     echo $e->getMessage(); 
    } 
} 

循環將繼續異常後,並在try/catch語句,你會看到

123Not一個number56

2

你試過try/catch解決方案嗎?它在這裏有完美的描述:http://php.net/manual/en/language.exceptions.php

「正常執行(在try塊內沒有引發異常時)將繼續在按順序定義的最後一個catch塊之後繼續。

所以你可以把你的send函數放到try/catch塊中 - >如果發生錯誤,將錯誤寫入數組並在foreach循環後打印數組。

1

您可以使用try cacth忽略錯誤

try { 
    // your code here 
} catch (Exception $e) { 
    // here do nothing 
} 

如果你想處理wjth的錯誤後,你可以在finally塊例外添加到陣列和處理錯誤。

try { 
    // your code 
} catch (Exception $e) { 
    // add error to error array 
} finally { 
    // deal with error array 
} 

http://php.net/manual/pt_BR/language.exceptions.php