2012-04-04 89 views
4

我是新來的異常,並試圖找出何時適合使用它們。在下面的php代碼中,我想更改echo(不需要告訴用戶)簡單地記錄消息。我應該用log->notice(...)(例如)替換echo還是應該使用異常(我打算記錄它)。我應該在這裏使用例外嗎?

if (file_exists($file)) { 
    echo 'File already exists and will be overwritten.'; 
} 

此外,如果我應該使用異常,那麼我將如何在這種情況下正確使用一個?

回答

1

異常通常設計爲處理意外的行爲 - 例如錯誤或問題。

在上面的例子中,我認爲它不是必需的,因爲您可能期望該文件存在,並且應該真正以流的方式編寫程序(如果已經存在文件)(Like你已經完成了)。這一切都取決於你期望發生的事情,而不是。

正常使用的情況可能是:

try 
{ 
    some_function(); 
} 
catch (Exception $e) 
{ 
    echo 'Function didn\'t behave as expected, please try again, here is the error: '.$e->getMessage(); 
} 
1

例外的是處理錯誤的標準方法..但他們可能會在你需要使用異常某些情況下。

如果你只是想驗證一個文件..不需要異常..如果錯誤的輸出將需要你重定向或有連鎖反應或者你可能正在開發一個框架等...我會建議你使用異常

try 
{ 
    if (file_exists($file)) { 
      throw new Exception('File already exists and will be overwritten.'); 
    } 
} 
catch (Exception $e) 
{ 
    header("Location: error?msg=". base64_encode($e->getMessage())); 
} 

結論

您正在使用的腳本什麼將決定其是否爲您更好使用異常或不

我跳這有助於

感謝

:)

1

例外是指如果遇到錯誤中斷執行的流程。這一切都取決於你如何構建流動,如果你想停止流動,因爲一個文件是否存在,你可以做到以下幾點:

try { 
    if (file_exists($file)) { 
     throw new Exception(sprintf('File already exists and will be overwritten'; 
    } 

    // If above conditional is realized, no code from this point forward will be 
    // executed 

} catch (Exception $e) { 
    error_log($e->getMessage()); 
} 

在你的具體的例子,我認爲這是確定以保持代碼原樣,因爲它似乎只是一個警告,這意味着你不想破壞執行流程,而是在警告之後繼續執行代碼。

如果你真的想要使用異常,你可以實現嵌套異常,但它會變得複雜,最終會過度殺傷。

有關exceptions的詳細信息,通過PHP文檔。

應該,除非你想讓用戶知道這個問題我剛剛更換回聲對數>的通知(...)

我會的。