2011-01-14 66 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()工作