Я знаю, что такое self::staticFunctionName() и parent::staticFunctionName() и как они отличаются друг от друга и из $this->functionName .
Но что такое static::staticFunctionName() ?
Это ключевое слово, используемое в 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 как ключевое слово для этого поведения немного сбивает с толку, так как это все. 🙂