Эта статья иллюстрирует операцию статической привязки между классами PHP и объектами на более поздней стадии. Поделитесь для вашей справки следующим образом:
Статическая привязка очень полезна для более поздних проектов. Например, режим одноэлементного уровня сервиса очень хорошо реализован с поздней статической привязкой.
Начиная с PHP 5.3.0, PHP добавил функцию, называемую постстатической привязкой, для ссылки на классы, которые статически вызываются в рамках наследования.
Чтобы быть точным, поздняя статическая привязка работает, сохраняя имя класса последнего “не переадресованного вызова”. При вызове статического метода имя класса является явно указанным (обычно в левой части оператора); при вызове нестатического метода это класс, к которому принадлежит объект. Так называемый вызов переадресации относится к статическим вызовам, выполняемым следующими способами: self:: , parent:: , static:: , а также forward_static_call() . доступна get_called_class() Функция для получения имени класса вызываемого метода, static:: указывает его область действия.
С лингвистической точки зрения эта функция называется “Поздняя статическая привязка”. “Поздняя привязка” означает, что static:: Вместо того, чтобы быть разрешенным для определения класса, в котором находится текущий метод, он вычисляется во время выполнения. Его также можно назвать “статической привязкой”, поскольку его можно использовать для (но не ограничиваясь) вызовами статических методов.
Приведенная выше процедура выведет:
B
Примечание:
В нестатической среде вызываемый класс-это класс, к которому принадлежит экземпляр объекта. Поскольку $this – > пытается вызвать частные методы в рамках одной и той же области действия, static:: может давать разные результаты. Другое отличие заключается в статичности:: Его можно использовать только для статических атрибутов.
Пример № 3 Используйте статику::
foo();
static::foo();
}
}
class B extends A {
/* foo() will be copied to B, hence its scope will still be A and
* the call be successful */
}
class C extends A {
private function foo() {
/* original method is replaced; the scope of the new one is C */
}
}
$b = new B();
$b->test();
$c = new C();
$c->test(); //fails
?>
Приведенная выше процедура выведет:
успех! успех! успех! Фатальная ошибка: Вызов частного метода C::foo() из контекста ” A ” в/tmp/test.php на линии 7
Примечание:
Разрешение поздней статической привязки будет продолжаться до тех пор, пока не будет получен полностью разрешенный статический вызов. С другой стороны, если используется статический вызов parent:: возможно, self:: Информация о вызове будет передана.
Пример № 4 Переадресация и Не Переадресация вызовов
Приведенная выше процедура выведет:
A C C
Больше читателей, интересующихся контентом, связанным с PHP, могут ознакомиться с темами этого сайта: Введение в объектно-ориентированное программирование Php, Введение в навыки работы с массивами PHP, Введение в базовую грамматику PHP, Краткое описание работы с PHP и использования операторов, Краткое описание использования строк Php, Введение в работу с базой данных php+mysql и Общие операции с базами данных php. Краткое изложение навыков письма ___________
Я надеюсь, что эта статья будет полезна для разработки PHP – программ для всех.