PHP中的静态方法:用于什么?

时间:2013-10-09 17:21:50

标签: php oop static

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

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

Documentation说:

  

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

即可访问

但是,上面例子中的两个方法都可以从类的外部访问,例如:

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

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

再次原谅我这样一个noob问题。我一直在努力找到自己并没有成功。感谢。

2 个答案:

答案 0 :(得分:3)

静态方法是全局可用工具(帮助程序),并且经常被过度使用。 Static methods are death to testability,应该几乎完全避免。

它们的优点和缺点是它们生活在全球范围内,您可以从任何地方调用它们,这使得它们在大多数情况下都会出现代码异味,因为它们会破坏封装。

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

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

  

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

答案 1 :(得分:2)

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