Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 1 Dołączył: 17.08.2011 Ostrzeżenie: (0%)
|
staram sie ostatnio pisac bardziej obiektowo, czytam ksiazki, tutoriale itd ale mam kilka watpliwosci i sprzecznych informacji i przydaloby mi sie troche rady bardziej doswiadczonego programisty. mianowicie:
1. rozumiem ze metody do ktorych odwoluje sie w postaci :: to metody klas ktore nie wymagaja tworzenia obiektu. czy np majac za zadanie dajmy na to usuniecie z bazy zdjecia ktore user ma w galerii, zmiana zdjecia glownego czy jakies inne operacje moge po prostu w funkcji miec User::setProfilePhoto($userid, $photoid) czy lepiej tworyc usera przez new i uzywac $user->setProfilePhoto(); 2. ogolnie nie bardzo rozumiem kiedy tworzyc nowy obiekt i wykonywac na nim jakies operacje, a kiedy robic cos wlasnie przy pomocy tego sposobu z ::. prosilbym o jakies lopatologiczne wyjasnienie bo jest na razie dla mnie plynne i czasem nie czuje roznicy. 3. duzo tutoriali mowi o uzywaniu getCostam i setCostam, aby pobierac i ustawiac parametry obiektu, aby nie stosowac w skrypcie $user->name = 'Zenon'; ten sposob jest bardziej elegencki i bezpieczny... ale tak sobie mysle ze mam np zmiane danych usera, ktory ma kilkanascie, czy dziesiat jakichs parametrow (imie, nazwisko, plec itd) i mam za kazdym razem uzywac tych funkcji? patrze na jakies projekty open source i tam bez kozery uzywaja bezposredniego przypisania parametrow i nie korzystaja z tych getow i setow. ktora szkola jest odpowiednia? a moze wszystko zalezy od projektu, jesli tak to od czego dokladnie? 4. i konkretny przyklad, ktory w zasadzie jest podsumowanie powyzszych pytan. mam update danych usera. dane leca sobie postem, miele je w jakiejs funkcji validujacej, potem uruchamiam funkcje ktora robi update. i co dalej w tej funkcji? a) stworzenie obiektu $user przez new, przypisanie wszystkich parametrow z $_POSTa (przez set czy po prostu $user->name = 'Zenon'?) i potem $user->update() gdzie juz w klasie dokonuje sie tylko update? b) czy moze po prostu w funkcji jakies User::update() i w klasie korzystajac z $this podpiecie wszystkiego z $_POSTa do obiektu i tam update do bazy. c) jakis inny sposob? pytania troche zakrecone ale nie daja mi spac i bede dzwieczny za wszelka pomoc kogos okielznanego w tym temacie :) |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%)
|
Ad. 1. Dobrze rozumiesz. Metody statyczne to metody klas. Jednakże OOP skupione jest wokół obiektów, nie klas, tak więc mając zadanie usunięcia zdjęcia użytkownika powinieneś poprosić obiekt odpowiadający za zarządzanie zdjęciami użytkownika o usunięcie go.
Ad. 2. Metod i właściwości statycznych trzeba używać z dużą rozwagą. Generalnie jest bardzo niewiele miejsc gdzie są one potrzebne. Ad. 3. Powinieneś korzystać z metod dostępowych. Jeżeli gdzieś masz kilkadziesiąt właściwości to pierwsza oznaka, że coś źle zaprojektowałeś. Zresztą generowaniem tych metod zajmie Ci się IDE, nie będziesz musiał tego klepać. Ad. 4. Jeżeli aktualizacja to oznacza, że sam użytkownik już istnieje, racja? Pobierasz sobie obiekt aktualizowanego użytkownika, wprowadzasz w nim zmiany, zapisujesz. A samym zapisem powinien zająć się już inny obiekt. Ogólnie jeżeli chodzi o operacje na obiektach reprezentujących dane w bazie typu MySQL musisz wykorzystać jakiegoś ORM-a. Na napisanie własnego nie masz w tej chwili szans, tak więc skorzystaj z Doctrine w wersji drugiej (na chwilę obecną niestety chyba jedyny ORM dla PHP mający sensowną architekturę - z obiektowego punktu widzenia). |
|
|
|
DBR Prawidlowe wykorzystanie OOP w PHP 17.08.2011, 02:21:27
by_ikar Ad.1 i Ad.2 Ostatnio właśnie koledze pokazywałem c... 17.08.2011, 12:59:25 ![]() ![]() |
|
Aktualny czas: 27.12.2025 - 16:45 |