2011-01-14 65 views
13

我有幾個處理cookie的函數。將它們分組到一個他們自己的類並將它們用作靜態方法將它們分組會是一個可怕的想法嗎?功能與靜態方法

功能:

function cookie_get(){} 
function cookie_set(){} 
function cookie_delete(){} 

靜態方法:

class cookie 
{ 
    static function get(){} 
    static function set(){} 
    static function delete(){} 
} 
+2

要知道平時的「靜態類/單身是單元測試的敵人」,你可能會遇到的問題。 – 2011-01-14 11:29:12

回答

8

是的,這將是一個可怕的想法,因爲static methods are hard to test and mock。爲什麼不創建一個真正的Cookie類,您可以在運行時將這些方法配置爲常規方法。

如果您只是想將這些函數分組到一個包中,那麼也可以使用use Namespaces


編輯:既然你在評論中提出來的:是的,對於任何測試的目的經常職責是靜態的不可測。所以你的初始狀態和改變它使用靜態類一樣「可怕」。即使僞命名空間也沒有給你帶來任何好處,因爲你已經將它應用到你的常規函數​​中。 cookie_getCookie::get一樣好或壞。

10

這將是一個偉大的想法,只要你充分意識到caveats involved的。這就是所謂的Utility Pattern

實用類 較好的選擇是可以 功能組合在一起的簡便方法。

+2

謝謝,這很瞭解。不過,我想知道爲什麼PHP的本地函數不使用它。爲什麼`str_replace()`不是`str :: replace()`? – 2011-01-14 11:29:07

+3

PHP是一種過程式語言,OOP功能作爲事後補充。它與內置函數(具有高度不一致的命名約定)相對,而靜態輔助類將相關函數組合在一起。 – karim79 2011-01-14 11:33:27

9

實際上是一種很好的做法來組織這樣的功能。現代的替代方案是使用namespace

3

這將是組織代碼的好方法,但爲什麼要使用靜態函數,只需爲所需的功能創建一個類。

或者如上所述使用命名空間,但我並不特別熟悉它們的優點/缺點。

$cookie->get()是更好的在我看來比cookie_get()工作