请参阅下面的类定义:
我目前正在使用 5.3.9 版本的 PHP
class A{
static function ab(){
echo "static function ab<br>";
}
public function xy(){
echo "public function xy<br>";
}
}
$obj = new A();
$obj->ab();
A::ab();
两个函数调用都给出相同的输出,没有任何错误
static function ab
static function ab
static method
怎么可能也可以由类对象调用?因为static method
只能使用class name only?!
调用
现在访问这两种调用static method
的方式有什么区别?
参考 php.net 网站
将类属性或方法声明为静态可以使它们无需实例化即可访问。声明为 static 的属性不能使用实例化的类对象访问(尽管静态方法可以)。
一个很大的区别是
由于静态方法在没有所创建对象的实例的情况下是可调用的,因此伪变量$this在声明为 static 的方法中不可用。
有关更多详细信息,请参阅页面 php.net/manual/en/language.oop5.static.php
只要你只是回显一个简单的字符串,如果你的方法将被声明为静态或公共,就没有区别,因为静态方法也可以与对象实例一起调用。从 PHP 5.5 开始,如果您使用静态方式调用公共方法,则会引发错误。但是,可以使用classname::staticMethod()
调用静态方法,因此页面应该只知道类,而不是真正需要它的实例。
另一个交易是方法内容。正如我所说,如果你只是回显一个字符串,你不需要一个静态方法。静态方法不在对象上下文中。这意味着您无法通过$this从当前对象访问属性或方法