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