见下面的课程定义:
我目前正在使用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
?
答案 0 :(得分:2)
参考php.net网站
将类属性或方法声明为静态使它们可以访问,而无需实例化类。声明为static的属性无法使用实例化的类对象访问(尽管静态方法可以)。
一个很大的不同是
因为静态方法在没有创建对象实例的情况下是可调用的,所以伪变量$ this在声明为static的方法中不可用。
有关详细信息,请参阅第php.net/manual/en/language.oop5.static.php页
答案 1 :(得分:1)
只要您只是回显一个简单的字符串,如果您的方法将被声明为static或public,则没有区别,因为静态方法也可以使用对象实例调用。从PHP 5.5开始,如果以静态方式调用公共方法,则会出现错误。但是,可以使用classname::staticMethod()
调用静态方法,因此页面应该只知道该类,但实际上并不需要它的实例。
另一笔交易是方法内容。正如我所说,如果你只是回显一个字符串,你不需要一个静态的方法。静态方法不在对象上下文中。这意味着您无法通过$ this
从当前对象访问属性或方法