1

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

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

文档说:

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

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

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

它可以在没有类 foo 的实例化的情况下工作(至少对于我正在使用的 PHP 5.3)。 那么,如果这两种方法都有效,那么使用静态方法有什么意义呢?

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

4

2 回答 2

3

静态方法是全局可用的工具(助手)并且经常被过度使用。静态方法是可测试性的死亡,应该几乎完全避免。

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

正如 Kolink 所提到的,在语言级别上,诸如此类的事情mysqli:real_escape_string()当然是有意义的,但在应用程序级别上,您通常不希望像那样污染全局范围并破坏封装。您宁愿考虑您真正需要哪些工具以及在何处将它们捆绑到有意义的组(类)中。

foo::baz()在严格模式下发出警告(应始终打开):

严格标准:不应在第 x 行的 yourfile.php 中静态调用非静态方法 foo:baz()

于 2013-10-09T17:44:48.097 回答
2

通常,它们可用于“帮助”功能,例如mysqli::real_escape_string(),该功能与类相关但不锁定到它的任何特定实例。

于 2013-10-09T17:23:50.083 回答