【发布时间】:2013-01-01 04:14:18
【问题描述】:
我有以下代码(真的,这是我的真实代码):
<?php
class Foobar
{
public static function foo()
{
exit('foo');
}
}
当我运行$foobar = new FooBar; $foobar->foo() 时,它会显示foo。
为什么 PHP 会尝试在对象上下文中使用静态方法?有没有办法避免这种情况?
好吧,你们没有明白我的问题:我知道静态和非静态方法之间的区别以及如何调用它们。这就是我的重点,如果我调用$foobar->foo(),为什么 PHP 会尝试运行静态方法?
注意:我运行 PHP 5.4.4,错误报告给E_ALL。
【问题讨论】:
-
@Daniel 不过应该叫
Foobar::foo。 -
澄清一下:我确实不希望在我使用它时找到这个静态方法,这对我来说没有意义。
-
@MaximeFabre 去接受一些答案......
-
该方法将始终被静态调用。恰好有两种不同的语法来调用它。尽量避免使用对您没有意义的语法,这样也可以避免与以后阅读您的代码的人混淆。但是,有时在注入到另一个对象中的实例化对象上调用静态方法可能是有意义的,因为您不一定知道传入的对象类的完全限定名。这只是在该实例中的一种方便。
标签: php static-methods magic-methods