何时在PHP中使用静态方法/字段?

时间:2011-04-02 07:21:55

标签: php static

我何时应该在PHP中使用静态函数/类/字段?它的一些实际用途是什么?

3 个答案:

答案 0 :(得分:5)

你不应该,它很少有用。 静态的常见用法是工厂方法和singleton :: instance()

工厂:

class Point{
  private $x;
  private $y;

  public function __construct($x, $y){
    ...
  }

  static function fromArray($arr){
    return new Point($arr["x"], $arr["y"]);
  } 
}

class DB{
  private $inst;

  private function __construct(){
    ...
  }

  static function instance(){
    if ($this->inst)
      return $this->inst;

    return $this->inst = new DB();
  }
}

答案 1 :(得分:3)

在Java / PHP等语言中使用静态方法。

一个简单的例子是,您希望在类的所有实例中使用变量,并且任何实例都可以更改其值,并且您希望它也会反映在其他实例中。

   class Foo{
    static $count=0;
    public function incrementCount(){
    self::$count++;
    }

   public function getCount(){
    return self:$count;
   }
  }

如果没有静态,您无法通过一个对象设置计数值,也无法在其他对象中访问它。

答案 2 :(得分:1)

我偶尔会使用STATIC方法,因为我需要在Class中使用的简单函数,例如:

在UserProfile类中,我有一个方法,它返回一个数组,用于在从html页面填充数组后将数据传回给类。

    Class UserProfile{

        Public Static get_empty_array(){

            return array('firstname'=>'',lastname=>''); //usually much more complex multi-dim arrays

        }

    }

这样,空数组可以在类/对象中使用,也可以在外部用作起始模板。 我也将静态方法用于通常是独立函数的函数,但是我想将它们保存在类中,因此它们一起使用,但也可以将它们作为静态方法在外部使用,例如:

    public static convert_data($string){

        //do some data conversion or manipulating here then

        return $ret_value;


    }

    $converted_data = class::convert_data($string);

我确实维护了一个常用的用户定义函数库,但是我发现在类中包含一些与之密切相关的函数是很方便的。