static ::和$ this->之间的区别我应该使用哪种语法?

时间:2016-06-17 10:50:23

标签: php static this

我有一些代码:

class a {
    public static function getCl() {
        echo __CLASS__;
    }
    public function test() {
        static::getCl();
    }
}
class b extends a {
    public static function getCl() {
        echo __CLASS__;
    }
}
$testClass = new b();
$testClass->test();

并且结果如下:b。然后我试试这个:

class a {
    public static function getCl() {
        echo __CLASS__;
    }
    public function test() {
        $this->getCl();
    }
}
class b extends a {
    public static function getCl() {
        echo __CLASS__;
    }
}
$testClass = new b();
$testClass->test();

这个结果仍然是b。我已经知道static ::和self ::之间的区别了,但有人可以告诉我static ::和$ this->之间有什么不同吗?在我的代码中。我应该使用哪一个?

1 个答案:

答案 0 :(得分:0)

您的上下文将产生相同的结果。

以下是关于两者的简单描述。

static : - 引用late static binding从PHP 5.3.0开始,PHP实现了一个名为late static bindings的功能,可用于在静态继承的上下文中引用被调用的类。

对当前类的静态引用(如self ::或 CLASS )使用函数所属的类进行解析,如在其定义的位置:

虽然Late static bindings试图通过引入一个引用最初在运行时调用的类的关键字来解决该限制。基本上,一个关键字允许您从父类方法引用子类。决定不引入新的关键字,而是使用已经保留的静态。

$ this : - 指当前对象。

进入对象的函数后,您可以完全访问其变量,但要设置它们,您需要比仅使用要使用的变量名更具体。要正确指定要使用局部变量,需要使用特殊的$ this变量,PHP总是将其设置为指向您当前使用的对象。