![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 26.09.2004 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Czy ktoś z Was wie jak odczytać nazwy pól obiektu, jeśli były one ustawiane metodą __set? ![]() Zależy mi na takim oto rozwiązaniu: Mam klasę View(). Dla obiektu tej klasy w kontrolerze ustawiam różne dane. Ponieważ może być ich zmienna liczba, dlatego nie chcę towrzyć stałych pól np $model1, $model2, zamiast tego używam metody __set do ich ustawiania. Teraz w metodzie show() chcę odczytać nazwy tych pól i przypisać je do szablonu Smarty. Próbowałem to zrobić funkcją get_class_vars(get_class($this)) ale okazało się, że odczytuje ona tylko pola predefiniowane wcześniej w klasie. Pól ustawionych za pomocą __set nie widzi ![]() Jeśli ktoś ma jakiś pomysł będę wdzięcny. Oto kod:
A oto przykład użycia w kontrolerze:
Myslę, że sprawa jest warta zachodu, bo czy przypiszemy jedną listę czy 15, klasa HTMLView za nas robiłaby całe przypisanie do Smarty. Poza tym kod jest zupełnie niezależny od danych pobranych z modelu. Ten post edytował jafet 20.04.2006, 22:49:26 -------------------- IT Pracownia Strony Joomla
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Hmmm, skoro nie działa poprzez domyślne funkcje to napisz własną (uprzedzam, że nigdy sie w ten temat nie zagłębiałem. Może istnieć inne, lepsze rozwiązanie). W metodzie _set stwórz tablicę i dodawaj pola obiektu do niej - pamietaj, koniecznie poprzez referencję. Potem wystarczy metoda zwracająca Tobie tą tablicę (+ predefiniowane pola obiektu).
P.S. Sprawdź czy nie odczytasz ich iterując poprzez obiekt (w ostatniej chwili pryszło mi to do głowy). |
|
|
![]()
Post
#3
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Może tak:
:?: |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 26.09.2004 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
Dzięki wielkie za sugestie Wasze. Poszedłem tym właśnie tropem, tylko trochę dostosowałem rozwiązanie mike_mech. Jakby ktoś potrzebował to oto działający kod:
Pozdrawiam -------------------- IT Pracownia Strony Joomla
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
HA! Miałem rację, poprzez iterację są widoczne również dynamiczne pola klasy.
Przeanalizujcie sobie ten przykład.
a to jest output: Kod Iteracja poprzez metode klasy publicChild => publicChild private1Child => privateChild protectedChild => protectedChild publicParent => publicParent protectedParent => protectedParent name_01 => value 01 name_02 => value 02 name_03 => value 03 Iteracja poprzez funckję zewnętrzna publicChild => publicChild publicParent => publicParent name_01 => value 01 name_02 => value 02 name_03 => value 03 Oj, dopiero teraz zauważyłem ten warunek: Cytat Czy ktoś z Was wie jak odczytać nazwy pól obiektu, jeśli były one ustawiane metodą __set? . Więc to co napisałem, raczej się tobie nie przyda ~jafet.
![]() Ten post edytował LBO 21.04.2006, 21:37:50 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 146 Pomógł: 0 Dołączył: 9.03.2006 Skąd: Columbus Georgia Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 415 Pomógł: 117 Dołączył: 7.09.2005 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
To zadziała dokładnie tak samo jak:
edit: Co do pytania założyciela tematu: Cytat Czy ktoś z Was wie jak odczytać nazwy pól obiektu, jeśli były one ustawiane metodą __set? ~mike_mech, nie trzeba tworzyc dodatkowej tablicy, by osiągnąć ten efekt. Oto kod:
Ten post edytował LBO 23.04.2006, 00:41:22 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 19:49 |