【发布时间】:2023-03-29 14:45:02
【问题描述】:
我非常抱歉提出这么愚蠢的问题,但我是 OOP 的新手,并试图弄清楚静态方法的用途。这是一个示例 PHP 代码:
class foo{
static function bar(){
//do something here
}
public function baz(){
//do something different
}
}
将类属性或方法声明为静态使它们无需实例化即可访问
但是,上面示例中的两种方法都可以从类外部访问,如下所示:
foo::bar();
foo::baz();
它可以在没有类 foo 的实例化的情况下工作(至少对于我正在使用的 PHP 5.3)。 那么,如果这两种方法都有效,那么使用静态方法有什么意义呢?
再次原谅我提出这样一个菜鸟问题。我一直在努力寻找自己,但没有成功。谢谢。
【问题讨论】:
-
您对
baz的调用在技术上是无效的,即使它会起作用;即使它是实例级方法,您也静态调用它。 -
在>=5.4(非静态方法的静态调用)中不能这样做。您可以在非静态方法中使用 $this,即使在 5.3(在非对象上下文中使用 $this)也会出错,然后静态调用。
-
静态方法的意义在于你可以在不实例化类的情况下调用类级别的方法。 baz() 是一个实例方法,应该在类的实例上调用,而 bar() 是一个静态方法,应该在类本身上调用。
-
好吧,据我了解,只有静态方法应该用 classname::method() 调用,对吧? 只是想知道...如果以这种方式调用非静态方法是无效的,为什么它甚至在
-
您可能想阅读这篇文章,r.je/static-methods-bad-practice.html