PHP静态对象和方法


PHP Static objects and methods

我想知道什么时候应该使用静态方法和属性,而不是"普通"属性和方法。我知道可以在不创建对象实例的情况下调用静态方法,但我似乎找不到其他使用静态方法或属性的示例。

有人能用一些例子来解释静态关键字如何以及何时使用(或不使用)吗?

静态螺旋桨的值在相同类型的所有类别中共享:

class foo{
  static $bar;
  function __construct($set = null){
    if($set){
      self::$bar = $set;
    }
    echo self::$bar;
  }
}
$a = new foo(1); // 1
$b = new foo();  // 1

它们对于保存(例如)要在整个类中共享的资源非常有用,比如数据库连接。它还可以用于统计对特定函数的调用次数等。

现在,静态方法有助于将代码分组在同一范围内,与可能不需要类实例的类进行交互。例如,它们可能返回一个静态变量,该变量包含一个类的实例。因为它们本质上是方法,所以它们必须遵循接口,并且可以强制一个类具有一个名为getInstance()的静态方法,使其具有与其他一次性类相同的流。(提示,它非常适合特征)

当静态方法不改变对象的状态时,静态方法很方便。

class yourMom{
    public $name;
    function __construct($name, $ageInYears){
         $this->name = $name;
         $this->age_in_days = self::yearsToDays($ageInYears);
    }
    private static yearsToDays($years){
        return 365 * $years;
    }
}

在这个例子中,它基本上是一个辅助函数。