在php中将函数声明为static

时间:2012-08-09 11:24:19

标签: php static-methods

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

2 个答案:

答案 0 :(得分:5)

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

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

YourClass::yourMethod();

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

你也说:

  

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

这是我书中的一大代码味道。这使得听起来您的班级违反了SRP principle中的SOLID programming

因此我只是实例化该类。

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

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 silver bullet

答案 1 :(得分:0)

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

class Foo {
   public static function bar( ) {
      echo "bar called";
   }
}