Я знаю, что такое 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 как ключевое слово для этого поведения немного сбивает с толку, так как это все.  🙂