Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Prawidlowe wykorzystanie OOP w PHP
DBR
post
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 :)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
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).
Go to the top of the page
+Quote Post

Posty w temacie


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: 27.12.2025 - 16:45