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