我想知道什么时候应该使用静态方法和属性,而不是"普通"属性和方法。我知道可以在不创建对象实例的情况下调用静态方法,但我似乎找不到其他使用静态方法或属性的示例。
有人能用一些例子来解释静态关键字如何以及何时使用(或不使用)吗?
静态螺旋桨的值在相同类型的所有类别中共享:
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;
}
}
在这个例子中,它基本上是一个辅助函数。