![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 10.06.2005 Ostrzeżenie: (0%) ![]() ![]() |
Mam kilka klas i zmienną zawierającą instancję jakąś klasy.
Klasy: Klasa1 Klasa2 Klasa3 i zmienna: $klasa = new Klasa(); Problem: Sprawić, żeby $klasa będąca instancją klasy Klasa zawierała wszystkie metody klas Klasa1, Klasa2, Klasa3, a jeżeli ostatnio "dodana" klasa posiada metody o tych samych nazwach, żeby przeciążała. Nie wchodzi w grę dziedziczenie, ponieważ z założenia nie wiem jakie mam klasy "na wejściu" i w jakiej kolejności. Myślałem nad wzorcem Dekorator. Poszedłbym w dobrym kierunku? Jest możliwe zrobienie czegoś takiego? Ewentualnie może routing metod (jest coś takiego?). Wpisuję metodę, a Klasa szuka jej po kolei z klas na swojej liście. Proszę o sugestie (IMG:style_emoticons/default/smile.gif) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 853 Pomógł: 25 Dołączył: 27.08.2003 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
To o czym mówisz to wielodziedziczenie, czy też inne formy jak mixins, traits etc. PHP, jak na razie (są przymiarki do Traitsów) tego nie wspiera. Można kombinować (np. http://www.symfony-project.org/book/1_0/17...Symfony#Mixins), próbować wykorzystać jakoś __call, ale ani to wydajne ani eleganckie. Poza tym nie będziesz miał dostępu do chronionych i prywatnych metod załączanych klas (obiektów), chyba, że w każdej też specjalną obsługę dołożysz w __call, ale to już się robi niezły potworek.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 10.06.2005 Ostrzeżenie: (0%) ![]() ![]() |
próbować wykorzystać jakoś __call, ale ani to wydajne ani eleganckie. Myślę, że to mi wystarczy - __call() i call_user_func() (IMG:style_emoticons/default/smile.gif) Metody prywatne i chronione będą potrzebne jedynie w granicach każdej z klas z osobna. Dzięki serdeczne! (IMG:style_emoticons/default/smile.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 18:56 |