我非常抱歉问这样一个愚蠢的问题,但我是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()
,其中函数与类相关,但不锁定到它的任何特定实例。