我何时应该在PHP中使用静态函数/类/字段?它的一些实际用途是什么?
答案 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);
我确实维护了一个常用的用户定义函数库,但是我发现在类中包含一些与之密切相关的函数是很方便的。