Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> jak wywołać metodę najwyższego rodzica przy wielokrotnym dziedziczeniu?
czarek1986
post
Post #1





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 15.09.2008

Ostrzeżenie: (0%)
-----


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.

Ten post edytował czarek1986 17.06.2010, 19:25:12
Go to the top of the page
+Quote Post
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Nie korzystałem z czegoś takiego, ale strzelam, że:
  1. parent::parent::metoda()
Go to the top of the page
+Quote Post
czarek1986
post
Post #3





Grupa: Zarejestrowani
Postów: 72
Pomógł: 0
Dołączył: 15.09.2008

Ostrzeżenie: (0%)
-----


Nie tak na pewno nie bo też tak myślałem ale niestety wywala się błąd przy takim zapisie
Go to the top of the page
+Quote Post
darko
post
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
plurr
post
Post #5





Grupa: Zarejestrowani
Postów: 175
Pomógł: 12
Dołączył: 28.06.2007
Skąd: Bytom

Ostrzeżenie: (0%)
-----


możesz także skorzystać z reflection api: http://www.php.net/manual/en/reflectioncla...parentclass.php
Go to the top of the page
+Quote Post
phpion
post
Post #6





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Moim zdaniem rozwiązanie problemu jest jedno: napisać wspomniane klasy poprawnie. Opisywany problem świadczy jednoznacznie, że coś tu jest nie tak.
Go to the top of the page
+Quote Post
-=Peter=-
post
Post #7





Grupa: Zarejestrowani
Postów: 304
Pomógł: 51
Dołączył: 4.02.2005
Skąd: Kraków

Ostrzeżenie: (0%)
-----


  1. //w klasie sedan
  2. public function metoda()
  3. {
  4. samochod::metoda();
  5. }
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




No tak, ale to pod warunkiem, że metoda jest STATYCZNA.
Go to the top of the page
+Quote Post
-=Peter=-
post
Post #9





Grupa: Zarejestrowani
Postów: 304
Pomógł: 51
Dołączył: 4.02.2005
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Mylisz się (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
cojack
post
Post #10





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


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.
Go to the top of the page
+Quote Post
yevaud
post
Post #11





Grupa: Zarejestrowani
Postów: 471
Pomógł: 89
Dołączył: 29.07.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


@cojack
nie bardzo wiem o co Ci chodzi (IMG:style_emoticons/default/smile.gif)
" ale możesz też $thisem, kto Ci broni" (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
cojack
post
Post #12





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


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.
Go to the top of the page
+Quote Post
yevaud
post
Post #13





Grupa: Zarejestrowani
Postów: 471
Pomógł: 89
Dołączył: 29.07.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif) nie zawsze mozemy jechac metodami w gore drzewa jak leci, czasami praktyka psuje nasze misterne plany (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
cojack
post
Post #14





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


@-=Peter=- dał dobrą odpowiedź, temat do zamknięcia ;]
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 22:23