Статическая:: staticFunctionName()

Я знаю, что self::staticFunctionName() и parent::staticFunctionName(), и как они отличаются друг от друга и от $this->functionName.

Но что такое static::staticFunctionName()?

Ответ 1

Это ключевое слово, используемое в 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 в качестве ключевого слова для этого поведения является путаным, так как все это.:)