• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[PHP] - dziedziczenie własności statycznych

Object Storage Arubacloud
0 głosów
288 wizyt
pytanie zadane 12 kwietnia 2018 w PHP przez niezalogowany

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

1 odpowiedź

+1 głos
odpowiedź 12 kwietnia 2018 przez Comandeer Guru (601,550 p.)
wybrane 12 kwietnia 2018
 
Najlepsza

Bo foo jest zadeklarowane w klasie C, a self odnosi się do miejsca, w którym zadeklarowano. Żeby działało to tak, jak chcesz, zamiast self powinieneś użyć słowa kluczowego statichttp://sandbox.onlinephpfunctions.com/code/7a3bcc6f8587c3e475dd82dd8cfd41904c93b159

komentarz 12 kwietnia 2018 przez niezalogowany
oczywiście nasłuchałem się pewnie głupot w pewnym tutorialu, gdzie koleś mówił, iż W ZASADZIE self nie różni się niczym od static... dlatego z góry przyjąłem to do siebie i nie zwracałem na to uwagi przy rozważaniach na tym
komentarz 12 kwietnia 2018 przez niezalogowany

@Comandeer, czy tak chcę, czy nie to w tym przypadku dla mnie obojętne. Jedyne co chciałem to zrozumieć mechanizm :) 

Dzięki za nakierowanie, fajnie też jest to wyjaśnione tutaj:

https://stackoverflow.com/questions/4718808/php-can-static-replace-self

Ale to znalazłem dopiero po nakierowaniu na różnicę między `self` a `static`

Podobne pytania

0 głosów
1 odpowiedź 296 wizyt
pytanie zadane 1 września 2015 w C i C++ przez criss Mędrzec (172,590 p.)
–1 głos
1 odpowiedź 362 wizyt
0 głosów
4 odpowiedzi 6,048 wizyt
pytanie zadane 30 stycznia 2016 w C i C++ przez Mateo500 Nowicjusz (150 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...