Witajcie,
przeglądam i przyswajam sobie podstawy z obiektówki w PHP i mam pytanie, na które odpowiedzi nie mogłem znaleźć w dokumentacji ani też w innych miejscach w Internetach... Jeżeli gdzieś jest to z góry wielkie sorki
Otóż poniżej kod:
class A {
public function foo() {
$this->bar();
}
public function bar() {
echo 'a';
}
}
class B extends A {
public function bar() {
echo 'b';
}
}
$obj = new B;
$obj->foo(); // b
Ten kod rozumiem, iż wywołanie metody foo() w kontekście obiektu klasy B zwróci mi najnormalniej wartość 'b'. To jest dla mnie zrozumiałe, ale poniżej kod z własnościami statycznymi:
class C {
public static function foo() {
self::bar();
}
public static function bar() {
echo 'C';
}
}
class D extends C {
public static function bar() {
echo 'D';
}
}
$obj = new D;
$obj->foo(); // C
I w tym przypadku wywołana metoda statyczna wywołuje metodę statyczną z klasy C, a nie z klasy D, czyli wynikiem będzie wyświetlenie 'C' mimo, że przeciążam metodę statyczną bar() w klasie D.
Próbuję to sobie jakoś tłumaczyć, ale prosiłbym Was, osoby doświadczone w tym temacie, powiedzieć mi dlaczego tak się dzieje?
Z góry dzięki za odpowiedzi