0

请看下面的类定义:
我目前使用的是 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

4

2 回答 2

2

参考php.net网站

将类属性或方法声明为静态使它们无需实例化即可访问。声明为静态的属性不能用实例化的类对象访问(尽管静态方法可以)。

一个很大的区别是

因为静态方法可以在没有创建对象实例的情况下调用,所以伪变量 $this 在声明为静态的方法中不可用。

有关详细信息,请参阅页面php.net/manual/en/language.oop5.static.php

于 2013-10-08T05:15:08.413 回答
1

只要您只是回显一个简单的字符串,就没有区别,如果您的方法将被声明为静态或公共,因为静态方法也可以与对象实例一起调用。从 PHP 5.5 开始,如果您以静态方式调用公共方法,则会引发错误。但是,可以调用静态方法,classname::staticMethod()因此页面应该只知道该类,而不需要它的实例。

另一个交易是方法内容。正如我所说,如果你只是回显一个字符串,你不需要一个静态方法。静态方法不在对象上下文中。这意味着您不能通过 $this 从当前对象访问属性或方法

于 2013-10-08T05:15:19.537 回答