2011-04-26 65 views
0

在我的圖書館裏,我有一個班級做了一些處理,而這個process()方法的返回是一個Result班。是否有必要驗證進入結果類的數據?

例如,

class Result { 
    protected $data1; 
    protected $data2; 
    public function __construct($data1, $data2) { 
     $this->data1 = $data1; 
     $this->data2 = $data2; 
    } 
    // Some getters that use $data1 and $data2 
} 

Result類有它的一些干將這個過程對他們的回報$data1$data2

現在,對於這些工作的獲得者$data1$data2將需要具有某種格式,例如,字符串,多維數組等

我處理班上總是正確的實例Result,但我應該還是可以驗證數據進入Result反正

如果注入無效數據並運行特定方法,則會發生PHP錯誤,這顯然很糟糕。但只有當某人以錯誤的數據物理實例化Result類時纔會發生這種情況。

我只是不想添加驗證,因此更多的開銷,當我不相信它實際上是必需的。

想法?

回答

3

你相信數據的來源嗎?如果是這樣,那麼不要擔心驗證。另一方面,如果此數據來自不可信來源—一個主要示例:用戶從網頁提供的數據然後是,那麼您絕對應該驗證輸入。

+0

我認爲這個問題暗示了在沒有用戶輸入的情況下從代碼實例化結果類。 – TJHeuvel 2011-04-26 14:55:51

+0

正如我所說的,在數據​​經過了一些廣泛的驗證和處理之後,'Result'類只能被* my *代碼實例化,所以當它被注入到Result中時,它可以被信任。唯一可能無效的方法是有人直接在此過程之外實例化「Result」,如果他們這樣做了,則無論如何都會中斷使用。所以我傾向於不重複驗證。 – 2011-04-26 14:58:42

+0

@Stephen:那就是你的答案。 – 2011-04-26 14:59:52

0

在我看來,你應該在理論上。如果這是課堂上問你的問題,答案應該是肯定的,你永遠不知道哪個角落案例發生,或者其他人必須維護你創建的應用程序,並且可能會破壞應用程序。

然而,在實踐中,您的客戶和僱主寧願看到工作軟件(至少對他們來說)很多從未真正做過任何事情的代碼行。我只是把它寫在我的名單上,做一些優先事項。

+1

我完全同意。但是,讓我們只是說類應該執行所需的最小驗證,以確保它們處理不會爆炸的數據。也就是說,你期待一個數組,檢查它是否是一個數組,否則拋出一個異常。在這個級別通常不需要相同的「驗證方案」,只是基本的完整性檢查很可能。 – 2011-04-26 15:10:46

相關問題