使用新创建的$ obj或使用类名访问静态方法

时间:2013-10-08 05:05:32

标签: php oop static-methods

见下面的课程定义:
我目前正在使用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

之间有什么区别?

2 个答案:

答案 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

从当前对象访问属性或方法