静:: staticFunctionName()

时间:2010-11-08 01:50:57

标签: php

我知道self::staticFunctionName()parent::staticFunctionName()是什么,以及它们彼此之间以及$this->functionName之间的差异。

但是static::staticFunctionName()是什么?

1 个答案:

答案 0 :(得分:15)

它是PHP 5.3+中用于调用后期静态绑定的关键字 请阅读手册中的所有相关内容:http://php.net/manual/en/language.oop5.late-static-bindings.php


总之,static::foo()的作用类似于动态self::foo()

class A {
    static function foo() {
        // This will be executed.
    }
    static function bar() {
        self::foo();
    }
}

class B extends A {
    static function foo() {
        // This will not be executed.
        // The above self::foo() refers to A::foo().
    }
}

B::bar();

static解决了这个问题:

class A {
    static function foo() {
        // This is overridden in the child class.
    }
    static function bar() {
        static::foo();
    }
}

class B extends A {
    static function foo() {
        // This will be executed.
        // static::foo() is bound late.
    }
}

B::bar();

static作为此行为的关键字有点令人困惑,因为它只是。 :)