何时使用而不使用静态功能?

时间:2014-12-11 03:18:54

标签: php oop

我的同事说当你执行不需要任何扩展的固定内容时静态是好的,但有一天我们需要在他的代码之上添加功能。哎呀我们必须修改ori代码,因为他使用了大量的静态内容,而且我们不能继续使用它。

class test {
    public static function test1() {
        echo 'hi';
    }
}
test::test1();

为什么要使用静态功能?何时使用它而不使用静态功能?

3 个答案:

答案 0 :(得分:2)

当函数不依赖于应用该方法的特定对象时,可以使用static。这适用于您的应用程序取决于其设计。

例如,如果您有一个处理日期和时间的类,并且它包含一个返回当前时间戳的函数,则不需要将其应用于特定日期对象 - 对于任何日期它都是相同的。所以它可能是一个静态函数。

如果您需要在创建类的任何实例之前运行某些函数,则可能需要静态函数。如果使用工厂模式,则将首先使用方法创建实例。这必然是一种静态方法。

答案 1 :(得分:1)

如果您需要一个函数而不调用Class构造函数,则可以使用静态函数。 例如,我有一个这样的类:

class Animal {
 .............
 .........

  private function name() {
    // This will print name of Animal that you assign through $this
    echo $this->$name;
  }
}
Animal->name();

在另一种情况下,您希望为您的类实现一个不需要$ this的函数。第二个:

class Animal {
 .............
 .........

  public static function splitName($name) {
    // In this case your source is assigned by parameter, not by $this
    echo explode("-",$name);
  }
}
Animal::splitName();

如果你是初学者,那就容易记住'如果你使用静态功能,数据源来自param。然后对于私人功能,数据来自$ this'......得到了吗?通过评论更多地问我,詹姆斯

答案 2 :(得分:0)

作为一般经验法则,最好尽可能远离静态代码。当您开始使用静态调用时,您将紧密耦合该类到您的代码中。这使得以后在想要替换模拟类的静态类时很难测试代码。在大多数情况下,最好使用依赖注入。

也就是说,就像糖和盐一样,静态代码也有它的位置,如果你小心并正确使用它,你可以拥有适合你的静态代码的应用程序。例如,单例模式依赖于静态方法来获得对单例本身的引用。静态方法适用于不需要依赖任何类状态的基本实用程序函数。

最后,最好远离它们。有些人称他们是邪恶的(他们不是),但是如果你使用它们,至少要花时间探索为什么你正在使用它们,如果静态类的设计比混凝土更好一个针对您的特定用例。