2011-05-08 59 views
2

今天我和我的一個朋友聊了一個很好的聊天室。我們介紹了Web開發的幾個方面。PHP:例外與自定義錯誤

他批評了我的應用程序錯誤處理的辦法,基本上如果我需要檢查用戶權限執行一個動作,我執行以下操作:

他說,我應該使用異常。所以我開始閱讀並認爲我學到了很好的例外習慣。

只有幾件事情需要澄清:
1.我應該在Web應用程序中使用任何異常嗎?
2.如果是這樣,如何在生產中向用戶顯示消息?
3.你會建議什麼?

+0

此代碼(特定於回聲)駐留在輸出模板中嗎? - 例外情況肯定不適用於「一切」。將它們用於最終用戶消息信號是邊界可行的(特殊異常類),但理想情況下,用戶通知應使用應用程序處理的單獨系統,而不是運行時。 – mario 2011-05-08 23:04:56

回答

1

check_user_perms應該絕對返回TRUEFALSE(不是NULL!)。

例外情況爲特殊情況,不是一般的程序流量控制。

一個例子可能是:

  • 如果用戶有權做這個動作,返回TRUE
  • 如果用戶沒有權限做這個動作,返回FALSE
  • 如果用戶不存在,拋出一個異常(因爲如果這個函數首先被調用,我們會期望用戶存在)。
4

例外應該用於「特殊情況」。檢查用戶是否具有適當的權限不是「特殊情況」。這是一個非常常見的支票,不應該使用例外。回到true/false這裏沒問題。

另一方面,如果在檢查用戶是否有權訪問時發生「例外」錯誤,例如由於服務器關閉而無法檢查身份驗證服務器,則引發異常將是適當的。

這裏有一些更多的資源來看看:

0

您應該使用特殊的,即意外或異常情況例外。根據檢查的情況,缺乏權限可能是例外或不是。例如,如果您的代碼只爲授權用戶執行一項操作,而另一項操作只針對未授權用戶執行一項操作,或者更常見的是允許對授權用戶進行額外訪問(如爲管理員顯示管理員菜單),則您不應使用異常這個。另一方面,如果未經授權的用戶嘗試訪問需要授權的Web操作或非管理員嘗試訪問僅限管理員的操作,則異常可能是適當的響應。在這種情況下,您應該捕獲異常並執行相應的操作,例如重定向到登錄或錯誤操作。

作爲一個泛化,我會說確定用戶是否具有特定權限的代碼不應該拋出異常,而是返回true或false。調用該調用的代碼可能會根據上下文選擇在需要和期望權限時拋出異常。