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

Другие вопросы по тегам