• 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
301 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 (603,480 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ź 300 wizyt
pytanie zadane 1 września 2015 w C i C++ przez criss Mędrzec (172,590 p.)
–1 głos
1 odpowiedź 401 wizyt
0 głosów
4 odpowiedzi 6,106 wizyt
pytanie zadane 30 stycznia 2016 w C i C++ przez Mateo500 Nowicjusz (150 p.)

92,757 zapytań

141,679 odpowiedzi

320,441 komentarzy

62,101 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

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!

...