我沒有足夠的PHP和編程經驗,所以我想知道,在我的情況下最好的決定是什麼。 這裏是我的代碼示例:PHP:如何在下面的情況下處理異常
public static function isAscii($string, $type, $length = -1)
{
if (!is_string($string))
throw new InternalException(ExceptionMessage::invalidFunctionParameterType(__CLASS__, __METHOD__));
if ($length !== -1 && !Str::isValidLength($string, $length))
return FALSE;
$ascii_array = Constants::asciiRegex();
if (!preg_match($ascii_array[$type], $string))
return FALSE;
return TRUE;
}
我想確保關鍵$type
存在陣列$ascii_array
。什麼是最好的方式來做到這一點?
我可以提供兩個決定:
- 最簡單的。只需用
array_key_exists()
函數手動檢查關鍵存在。如果鍵不存在 - 也會手動拋出異常。但我認爲這不是一個好主意,檢查這個條件是多餘的,因爲如果我不寫任何東西,PHP編譯器會產生警告(注意:未定義的索引:),我想以某種方式使用它。我發現有一些預定義的異常,例如OutOfBoundsException
和OutOfRangeException
,在Java中使用它們很容易,但似乎PHP不會拋出這些異常,只會引發警告和錯誤。 - 使用
set_error_handler()
函數將錯誤和警告轉換爲例外。但還有一個問題 - 我如何處理所有可能的錯誤?我試圖找到PHP錯誤和警告的完整列表,但it doesn't exist。 所以我不知道如何解決這個問題,請幫助我。 預先感謝您,希望您能夠理解我的問題,即使我的英語水平很差。
P.S.這是一個具有不同類型ascii字符串的正則表達式的數組。
如果你想檢查,如果數組中有某些東西,使用'in_array' - 我沒有明白你在這裏用異常做什麼?即返回「false」和拋出異常之間的區別?或者讓我們說:你期望的結果是什麼?應用程序的行爲應該不同嗎? – dognose
如果你只是想告訴一個字符串是不是ascii,那麼你的函數就會很複雜。如果這不是你正在做的,你應該選擇一個不同的函數名稱。 – crush
我同意,你在這裏有點過度勞累。在您的應用程序設計的這個階段,這種複雜性將來無濟於事。 –