PHP中的静态方法:干什么


Static methods in PHP: what for?

我非常抱歉问这样一个愚蠢的问题,但我是OOP的新手,并试图弄清楚静态方法的用途。下面是一个 PHP 代码示例:

class foo{
static function bar(){
//do something here
}
public function baz(){
//do something different
}
}

文档 说:

将类属性或方法声明为静态可以使它们无需实例化即可访问

但是,上面示例中的两种方法都可以从类外部访问,如下所示:

foo::bar();
foo::baz();

它可以工作(至少对于我正在使用的 PHP 5.3(而无需实例化类 foo。那么,如果这两种方法都有效,那么使用静态方法的意义何在?

再次原谅我这样一个菜鸟问题。我一直在努力自己找出它,但没有成功。谢谢。

静态方法是全局可用的工具(帮助程序(,经常被过度使用。静态方法对可测试性不利,应几乎完全避免。

它们

的优点和缺点是它们存在于全局范围内,您可以从任何地方调用它们,这使得它们在大多数情况下具有代码气味,因为它们破坏了封装。

在语言层面,正如Kolink所提到的,像mysqli:real_escape_string()这样的事情当然是有意义的,但在应用程序层面,你通常不想污染你的全局范围并破坏这样的封装。你宁愿考虑你真正需要什么工具,在哪里,并将它们捆绑到有意义的组(类(中。

您的foo::baz()会在严格模式(应始终打开(下引发警告:

严格的标准:非静态方法 foo:baz(( 应该 不是在 你的文件中静态调用.php在 X 行

通常它们可以

用于"辅助"函数,例如 mysqli::real_escape_string() ,其中函数与类相关,但不锁定到它的任何特定实例。