![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 686 Pomógł: 0 Dołączył: 10.11.2008 Skąd: Łódź Ostrzeżenie: (20%) ![]() ![]() |
Witam,
Mam do was takie pytanie : Chcę zrobić klasę która będzie zwracać obiekt (chyba tak to można nazwać), element biblioteki javascript ext. Taki przykładowy element (obiekt) wygląda tak :
Jak widać mamy tutaj pola 'nazwa : wartość' i teraz zastanawia mnie w jaki sposób najlepiej stworzyć klasę która będzie tworzyć takie obiekty, od razu zaznaczam że zamysł jest taki że każdy element będzie miał osobną klasę. Więc są dwie możliwości, jedna z nich wygląda tak :
Czy może lepiej będzie użyć do tego metod magicznych __set() i __get() ? czyli :
Zaznaczę że nigdy nie korzystałem z metod magicznych __set() i __get() więc nie wiem czy to dobry pomysł i jak to ma się do zamysłu architektonicznego.....proszę o pomoc.... ![]() ----------------------- Ktoś może pomóc , a może temat nie nadaję się na przedszkole ? Ten post edytował Wolfie 18.12.2009, 13:21:18 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 386 Pomógł: 25 Dołączył: 28.09.2005 Ostrzeżenie: (0%) ![]() ![]() |
Generalnie ja używałem __set() i __get() np dla klasy która mapuje tablice na obiekt. Np:
Generalnie jakoś unikam używania publicznych pól klasy. Jak coś chcę ustawić tworzę publiczną metodę setCos($wartosc){...}, dzięki temu, jeśli będzie potrzeba, mogę sobie przefiltrować w prosty sposób wartość ustawianą i jak coś np. rzucić wyjątkiem. Poza tym jeśli robię ustawianie pola z wysokością np: $object->height = '199';, zawsze jest spora szansa że zrobię literówkę i zamiast 'height' wpiszę 'heigth' i niby wszystko jest ok ale nie działa. I debugowanie czegoś takiego to męka :/ Ten post edytował piotrekkr 18.12.2009, 18:06:08 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cytat Generalnie jakoś unikam używania publicznych pól klasy. A kto tu mówi o publicznych polach? Cytat zawsze jest spora szansa że zrobię literówkę i zamiast 'height' wpiszę 'heigth' i niby wszystko jest ok ale nie działa. Dajesz w setterze warunek if(property_exists($this, $property)) { // ustaw } else {throw new Exception('Nie ma takiego pola!'); } i po problemie. To ja napiszę tak: jeśli masz mieć dość dużo atrybutów dla każdego z obiektów i do każdego masz pisać osobno getter i setter, bo polecam magiczny setter i getter. Pola ustaw jako protected i po sprawie. Innym rozwiązaniem jest zaimplementowanie metody (nazwę ją setAttribs), która przyjmuje tablicę (pary klucz - wartość: nazwa pola => wartość pola) i w niej robisz foreach na tej tablicy, sprawdzasz czy pole o podanej nazwie istnieje w tej klasie (warunek property_exists) i jeśli tak, to ustawiasz wartość pola o nazwie klucza na wartość z tablicy. Ten post edytował darko 19.12.2009, 22:48:48 -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 21:58 |