为php模块选择什么模式?

时间:2012-02-02 02:45:30

标签: php design-patterns module

我想要一个小的php模块。该模块将具有纯函数的方法。所以,这只是一系列功能。所有函数都获取一些参数并返回结果,仅取决于输入参数。

我有一些建议:

1。静态类

PHP没有真正的静态类,所以我只使用所有静态方法创建一个类:

class Some_Module
{
    static public function sum($a, $b, $c)
    {
        return $a+$b+$c;
    }

    static public function method2($a, $b)
    {
         return $a-$b+5;
    }
}

使用这些模块非常容易:

$x = Some_module::sum(1,2,3);

但是,我听说过(有很多关于SO的话题),静态是一种不好的做法。

2。单

它不是那么容易使用:

// we should not to forget to get instance
$module_instance = new Some_module;
$x = $module_instance->sum(1,2,3);

不便之处在于,我们现在应该初始化这个模块。 此外,SO上有大量的主题,其中解释了为什么Singleton在PHP中没用,所以它也是一个不好的做法。

这种模块使用什么模式?

2 个答案:

答案 0 :(得分:3)

我认为此讨论将有助于您的决定Static methods: are they still bad considering PHP 5.3 late static binding?

就个人而言,这取决于具体情况。存储一堆misc。辅助方法,我更可能将它用作全局和命名空间。在存储不需要实例化的特定类别的有限数量的方法时,静态类可能是一个不错的选择。要注意单元测试的目的,在cool::method这样的错误上下文中使用静态方法的许多类将会是地狱。

// keep it abstract to prevent it from being instantiated
abstract class Foo {
   // cannot be altered if inherited, although limitation still exists
   final public static function bar() {
      echo 'test';
   }
}

Foo::bar();

答案 1 :(得分:2)

简单,使用类但不要使方法静态。当然,这意味着你将使用一条额外的线来实例化它,这不是什么大问题。您将能够正确扩展该类并对其进行模拟以进行测试。