class t {
public function tt()
{
echo 1;
}
}
t::tt();
看到了吗?非静态函数也可以在类级别调用。那么如果我在public
之前添加一个static
关键字有什么不同呢?
最佳答案
除此之外,如果您尝试在您的方法中使用 $this
,如下所示:
class t {
protected $a = 10;
public function tt() {
echo $this->a;
echo 1;
}
}
t::tt();
静态调用非静态方法时会出现 fatal error :
Fatal error: Using $this when not in object context in ...\temp.php on line 11
即你的例子有点太简单了,与实际情况不符;-)
另请注意,您的示例应该给您一个严格的警告(quoting):
Calling non-static methods statically generates an
E_STRICT
level warning.
而且它确实做到了(至少,对于 PHP 5.3):
Strict Standards: Non-static method t::tt() should not be called statically in ...\temp.php on line 12
1
所以:不太好 ;-)
不过,静态调用非静态方法看起来不像任何一种好的做法(这可能是它引发严格警告的原因),因为静态方法与非静态方法的含义不同-static :静态方法不引用任何对象,而非静态方法在调用类的实例上工作。
再次重申:即使 PHP 允许您做某事(可能出于历史原因——比如与旧版本的兼容性),这并不意味着您应该这样做!
关于php - PHP中的静态方法与非静态方法有什么区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2439036/