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