PHPda kechiktirilgan statik bog'lanish nima?
sobes.tech AI
AIdan javob
Механізм, який дозволяє посилатися на викликаний клас у контексті статичних викликів. Він вирішує проблему, пов'язану з самореференціями у наслідних класах при використанні ключового слова static::.
Розглянемо приклад з використанням self:::
<?php
class A {
public static function who() {
echo __CLASS__; // Виведе A
}
public static function test() {
self::who(); // Викличе A::who()
}
}
class B extends A {
public static function who() {
echo __CLASS__; // Виведе B
}
}
B::test(); // Виведе A
У цьому випадку self::who() у класі A завжди викликатиме метод who з класу A, навіть якщо виклик test() походить з класу B.
Тепер розглянемо приклад з використанням static:::
<?php
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
static::who(); // Викличе who() з класу, який ініціював виклик test()
}
}
class B extends A {
public static function who() {
echo __CLASS__;
}
}
B::test(); // Виведе B
Тут static::who() у класі A при виклику з класу B буде посилатися на клас B і викликати метод who() з класу B.
Пізнє статичне зв'язування дозволяє динамічно визначати, який клас використовувати у контексті статичного виклику залежно від того, який клас фактично був викликаний. Це стає особливо корисним при роботі з ієрархіями класів і статичними методами, які мають поводитися поліморфно. Воно працює, запам'ятовуючи "неперенаправлений викликаний клас" (кінцевий клас у ланцюжку спадкування, з якого почався статичний виклик) і використовуючи його для розв'язання посилань static::.