Długo walczyłem w tej dziedzinie i doszedłem do konkluzji, ale ponieważ wniosek nie był tym, czego szukałem, zanim się poddam, postaram się sprawdzić, inni ludzie mówią. Wiara umiera ostatnia ...Rozszerzanie klas statycznych PHP
Załóżmy, że mamy superklasę (zwaną "Super") i podklasę (zwaną "Sub").
class Super {
protected static $title = 'super';
public static function get_class_name()
{
echo __CLASS__;
}
public static function get_title()
{
echo self::$title;
}
}
class Sub extends Super {
protected static $title = 'sub';
}
Teraz, prawdopodobnie oczekiwać od Sub rozciąga Super, że Sub będzie teraz dziedziczą wszystkich metod Super jest jednak, wydaje się, że tylko odbierać odniesień do metod sub-tych.
Mówię to, bo jeśli zadzwonię:
Sub::get_class_name();
wyjście jest "Super", a nie "Sub".
A jeśli zadzwonię:
Sub::get_title();
ponownie, wyjście jest "super", a ja nawet tytuł $ zadeklarowanej w Sub.
Oznacza to, że gdy wezwę dziedziczoną funkcję statyczną, zakres funkcji będzie super-klasą, a nie tą, która została wywołana (nawet jeśli wydrukujesz ślad, pokaże on, że połączenie zostało wykonane na nadklasie! !!), i aby uzyskać zakres jako podklasę, na której wywoływane jest wywołanie, muszę ponownie określić tę metodę wewnątrz tej podklasy. Cóż, ten rodzaj porażek ma na celu rozszerzenie klas, prawda?
Moje pytanie brzmi: czy mogę kiedykolwiek rozszerzyć klasę statyczną, zadzwonić do jednej z odziedziczonych metod i mieć zakres podklasy? lub przynajmniej by móc zidentyfikować jego classname? A jeśli nie, dlaczego miałbym kiedykolwiek chcieć rozszerzyć klasy statyczne?
Dzięki!
OK, teraz rozumiem. – treznik