Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak wywołać metodę najwyższego rodzica przy wielokrotnym dziedziczeniu?
Forum PHP.pl > Forum > PHP > Object-oriented programming
czarek1986
Witam

Buduje aplikację gdzie mam klasy które dziedzicza po sobie kilkakrotnie np. pojazd->samochod->sedan. Jak mogę wywołać jakąś metodę z najwyższego rodzica tzn z poziomu klasy sedan wywołać metodę w klasie pojazd, która na każdym poziomie dziedziczenia była nadpisywana?
Gdy wpisuje paren::metoda() to wywołuje mi tylko metodę z drugiego poziomu czyli w tym przykładzie z klasy samochod.
erix
Nie korzystałem z czegoś takiego, ale strzelam, że:
  1. parent::parent::metoda()
czarek1986
Nie tak na pewno nie bo też tak myślałem ale niestety wywala się błąd przy takim zapisie
darko
Ciekawe zagadnienie, możesz spróbować tak:
  1. // ...
  2. call_user_func(array(get_parent_class(get_parent_class($this)), 'NAZWA_METODY_KTORA_CHCESZ_WYWOLAC'));
  3. // ...

[za:] http://stackoverflow.com/questions/1557608...nts-constructor
plurr
możesz także skorzystać z reflection api: http://www.php.net/manual/en/reflectioncla...parentclass.php
phpion
Moim zdaniem rozwiązanie problemu jest jedno: napisać wspomniane klasy poprawnie. Opisywany problem świadczy jednoznacznie, że coś tu jest nie tak.
-=Peter=-
  1. //w klasie sedan
  2. public function metoda()
  3. {
  4. samochod::metoda();
  5. }
erix
No tak, ale to pod warunkiem, że metoda jest STATYCZNA.
-=Peter=-
Mylisz się winksmiley.jpg
cojack
Jeżeli nie ma tej metody w klasie samochód to ją wywołasz normalnie poprzez $this, jeżeli jest to możesz parentem, ale możesz też $thisem, kto Ci broni, poza tym parent:: nie jest rozwiązaniem bolączek. Dla mnie to parent:: został napisany dla konstruktórów i destruktórów. albo po to by rozjaśnić OOP w php gdyż te jest nielogiczne. W ciele klasy matki można wywoływać metody z klasy rodzica, gdyż metody są dopisywane do obiektu a nie do klas. Ja pierdziele, paranoja.
yevaud
@cojack
nie bardzo wiem o co Ci chodzi smile.gif
" ale możesz też $thisem, kto Ci broni" questionmark.gif broni mi przeslonieta metoda

"Dla mnie to parent:: został napisany dla konstruktórów i destruktórów"
przeciez odpowiednik tego sposobu odwolania sie do metody rodzica jest chyba w kazdym jezyku obiektowym i obiektowatym

"W ciele klasy matki można wywoływać metody z klasy rodzica, gdyż metody są dopisywane do obiektu a nie do klas."
przyznam ze nie wiem jak technicznie jest to rozwiazane, wydaje mi sie ze nie masz racji, ale nawet jesli to nie wiem co ma piernik smile.gif
cojack
Tak się po prostu użalam nad OOP w php, a jeżeli metoda z dziadka została przysłonięta przez rodzica, to nie widzę sensu by wywoływać metody z dziadka bezpośrednio z dziecka. Wywołaj metodę rodzica a w niej wywołaj metodę rodzica tego rodzica.

No nic spektakularnie trudnego.
yevaud
Cytat(cojack @ 20.06.2010, 19:46:53 ) *
Tak się po prostu użalam nad OOP w php

ale nad czym konkretnie, wydaje mi sie ze nie ma juz za bardzo na co narzekac smile.gif

Cytat(cojack @ 20.06.2010, 19:46:53 ) *
a jeżeli metoda z dziadka została przysłonięta przez rodzica, to nie widzę sensu by wywoływać metody z dziadka bezpośrednio z dziecka.

czasami taka potrzeba sie pojawia smile.gif nie zawsze mozemy jechac metodami w gore drzewa jak leci, czasami praktyka psuje nasze misterne plany smile.gif
cojack
@-=Peter=- dał dobrą odpowiedź, temat do zamknięcia ;]
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.