【发布时间】:2011-10-23 19:57:12
【问题描述】:
所以在 PHP 中你可以拥有
Class A{
function B(){}
}
你可以把它当作一个静态函数来调用:
A::B();
我的问题是......如果我能做到这一点,那么为什么我应该将函数 B() 声明为静态的,因为这样做会使 $this 不可用,因此灵活性较低,所以你有一切可失去的,但没有什么可做的收获...
或者将函数声明为我不知道的静态函数有什么好处?
我还听说“非静态方法的静态调用”已被“弃用”......这究竟意味着什么,尤其是与这种情况有关?当 B() 未被声明为静态时,我不应该做的事情是调用 A::B() 吗?如果有,为什么会这样?
【问题讨论】:
-
在严格模式下,将非静态方法作为静态方法调用会引发错误。这有望在未来成为默认行为。
-
(阅读提示) Statics considered harmful
-
"...如果我能做到这一点,那么为什么我应该将函数 B() 声明为静态,因为这样做会使 $this 不可用..."。如果你静态调用一个函数,那么
$this无论如何都不可用(PHP 抛出一个致命错误)。您仍然可以将self::$var和static::$var用于静态变量(非静态变量绑定到对象,而不是类)。 -
E_STRICT 错误将引发这些通知,以及有关如何优化代码的其他提示。错误报告(E_STRICT);
标签: php class function static static-methods