0

我有一组独立的函数,我想把它们放在一个类中。它们不依赖于类的任何对象,因此在调用它们时,所需的所有值都将作为参数传递。如果我将它们全部声明为静态这样我可以只用一个命令调用它们,className::functionName(argument1,argument2,...) 或者我将它们保持为普通的公共函数并通过类对象调用它们,这很好吗?

4

2 回答 2

5

你可以(但你不应该这样做):

class YourClass {
   public static function yourMethod( ) {
      echo "method called";
   }
}

YourClass::yourMethod();

你不应该这样做的原因是因为当你在其他一些类/函数/任何你紧密耦合YourClass到其他类的东西中使用静态调用时。因此,您很难进行单元测试或简单地切换到另一个方法,而无需通过所有使用它的代码。也不要忘记你刚刚添加了一些东西global

你还说:

我有一组独立的函数,我想把它们放在一个类中。

在我的书中,这是一个很大的代码气味。这听起来像是您的课程违反了SOLID编程中的SRP 原则

因此,我只会实例化该类。

让我们看看为什么它使您的代码难以测试:

class SomeClassWithMethods
{
    public static function doSomething()
    {
    }
}

class SomeClassYouWantToTest
{
    public function doSomething()
    {
        return SomeClassWithMethods::doSomething(); // this is now tightly coupled and would be impossible to mock when unit testing it
    }
}

SomeClassWithMethods::doSomething也是现在全球定义的。

我们喜欢称之为银弹:):

super::$static 银弹

于 2012-08-09T11:30:43.677 回答
0

是的,这还不错。您可以将它们定义为静态函数,就像您说的那样 - 您可以只用一个语句调用它们。

class Foo {
   public static function bar( ) {
      echo "bar called";
   }
}
于 2012-08-09T11:26:46.500 回答