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: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%)
|
Ad.1 i Ad.2 Ostatnio właśnie koledze pokazywałem ciekawy przykład, dlaczego trzeba metod/zmiennych statycznych używać z rozwagą. Powiedzmy sobie masz klasę która zawiera metody statyczne, które ci w sumie przydadzą się w klasie bardzo podobnej, lecz tylko niektóre z nich nadpisujesz, więc sobie dziedziczysz tą klasę. najlepiej jak pokażę kawałek kodu:
Kod <?php class Foo { public static $baz; } class Bar extends Foo { } Foo::$baz = 'some'; var_dump(Bar::$baz); Mimo że zmiennej $baz w obiekcie Bar nie przypisałeś żadnej wartości, zwróci ci "some". Żeby uciec od tego, można by zrobić tak: Kod <?php class Foo { public static $baz; } class Bar extends Foo { public static $baz; } Foo::$baz = 'some'; var_dump(Bar::$baz); Nadpisując zmienną, tyle że wówczas jaki sens ma dziedziczenie skoro musisz sporo rzeczy nadpisywać? Dlatego jest lepiej nie tworzyć klas statycznych, a obiekty chociażby wstrzykiwać jeden w drugi, dzięki temu nie trzeba nadpisywać zmiennych/metod w obiekcie żeby móc go "wyczyścić". Ad.3 Jeżeli masz niewiele danych do zmiany, wiesz jakie te dane są, to możesz z powodzeniem używać getMethodName/setMethodName, jeżeli np tak jak napisałeś, chciałbyś zaktualizować usera, dobrze jest stosować jeden get, jeden set, jeden has itp. wtedy robisz to tak $user->get('pole'), $user->set('pole', 'wartosc') coś w ten deseń. Ad.4 w samej aktualizacji już masz warunek który sprawdza czy zakończyło się to powodzeniem. W innym przypadku powiedzmy zwróci false i niech taki kod wygląda mniej więcej tak: Kod $updateResult = $user->update(array('pole' => 'wartosc', 'pole' => 'wartosc'));
if(!$updateResult) { //... informujesz użyszkodnika że aktualizacja się nie powiodła } else { //.. informujesz użyszkodnika że aktualizacja zakończyła się powodzeniem } |
|
|
|
DBR Prawidlowe wykorzystanie OOP w PHP 17.08.2011, 02:21:27
Crozin Ad. 1. Dobrze rozumiesz. Metody statyczne to metod... 17.08.2011, 03:36:21 ![]() ![]() |
|
Aktualny czas: 26.12.2025 - 01:46 |