Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: co powinno byc obiektem w cms
Forum PHP.pl > Forum > PHP > Object-oriented programming
marekaaa
Witam!

Jestem początkujący i chcę wiedzieć czy dobrze rozumiem to programowanie obiektowe smile.gif Zacząłem pisać prostego CMSa, nie jestem pewien czy dobrze rozumiem co powinno być obiektem, klasą, metodą. Poprawcie mnie jeśli źle myślę.

Mam tak:

1) klasa baza_danych, w niej metody obsługujące połączenie, rozłączenie z bazą i jedna wysyłająca zapytanie, które otrzyma jako argument.

2) klasa uzytkownik, obiektem tej klasy jest pojedyńczy uzytkownik(tak powinno być?), mam w niej zmienne: nazwa_uzytkownika, haslo. Metody: dodaj_uzytkownika, usun_uzytkownika, edytuj_uzytkownika.

Kiedy chce dodac uzytkownika to:

  1. <?php
  2. $user=new uzytkownik;
  3.  
  4. $user->nazwa_uzytkowinka="imie";
  5.  
  6. $user->haslo="asdasd";
  7.  
  8. $user->dodaj_uzytkownika();
  9. ?>


metoda dodaj_uzytkownika pobierze imie i haslo uzytkownika z nazwa_uzytkownika, haslo. Nastepnie wysle gotowe zapytanie do metody z klasy baza_danych.



Czy dobrze to zrobiłem? Tak samo myślałem robić z podstronami, menu i resztą.

I teraz drugie pytanie: jak rozwiązać wyświetlanie wszystkich uzytkownikow z bazy danych, jeżeli obiektem klasy jest tylko 1 użytkownik.



Nie zdziwie się, jeśli wszystko się okaże źle smile.gif Właśnie dlatego postanowiłem zapytać zmaiast pisac dalej. Pozdrawiam!
blooregard
Cytat
Czy dobrze to zrobiłem?

Dokładnie o to chodzi. Bardzo dobrze zrobiłeś.

Cytat
I teraz drugie pytanie: jak rozwiązać wyświetlanie wszystkich uzytkownikow z bazy danych, jeżeli obiektem klasy jest tylko 1 użytkownik.

Utwórz sobie klasę UsersCollection - kolekcja (lista) obiektów klasy User
W niej będziesz miał jako właściwość tablicę obiektów klasy User.

I wtedy robisz cos takiego:
  1. <?php
  2. ....
  3. private $users_collection = array();
  4. ....
  5. getUsersList() {
  6.     ...zapytanie, zwracajace w wyniku listę użytkowników...
  7.    while (wiersz) {
  8.         $users_collection[] = new User( [tutaj_ID_usera_na_przyklad_czy_co_tam_masz_w_konstrukotrze] );
  9.    }    
  10. .....
  11. }
  12. ?>
marekaaa
Czyli mam klasę uzytkownik, która obsługuje pojedzyńczego użytkownika i ma metody: dodaj_usera, usun_usera, edytuj_usera i właściwości np: id, imie, haslo.

Do tego tworzę klasę uzytkownicy, która ma tabelę obiektów klasy uzytkownik i jedną metodę ładującą z bazy danych wszystkie obiekty do klasy uzytkownik.

I teraz, gdy chcę coś zrobić to sobie odpalam metodę(z klasy uzytkownicy) ładującą obiekty, a następnie np. metodę dodaj_usera z klasy uzytkownik.

Jeśli tak to:

1) Czy klasa uzykownicy ma być matką klasy uzytkownik?
.radex
1. nie, jeśli dobrze zrozumiałem opis to nie.

Natomiast nie rozumiem po co komplikować sobie życie i zamiast

Użytkownicy::dodaj('nick', 'pass');

jest

  1. <?php
  2. $user=new uzytkownik;
  3.  
  4. $user->nazwa_uzytkowinka="imie";
  5.  
  6. $user->haslo="asdasd";
  7.  
  8. $user->dodaj_uzytkownika();
  9. ?>


Tego typu sposób natomiast jest dobry w przypadku, gdy masz "szeroką" (dużo kolumn) tabelę z użytkownikami i chcesz edytować jego dane:

  1. <?php
  2. $user = Użytkownicy::getData('nick');
  3.  
  4. $user->haslo="asdasd";
  5. $user->mail="foo@bar.pl";
  6. $user->gadu_sradu="542153422";
  7.  
  8. $user->update();
  9. ?>


Dużo wygodniejsze, bo edytujemy tylko te pola, które chcemy.
bim2
Jak już edytujecie to zrobcie to może tak

  1. <?php
  2. $oUser = new User(12); //lub new User('bim', 'name');
  3. $oUser->sPassword = md5('test123');
  4. $oUser->sMail = 'bim@gmail.com';
  5.  
  6. class User {
  7. public function __construct($sVal, $sCol = 'id')
  8. {
  9. //... pobranie z bazy
  10. $this->aData = $this->getRow('SELECT * FROM users WHERE `'.$sCol.'` = ''.$sVal.''');
  11. }
  12. public function __set($sWhat, $sOn)
  13. {
  14. $this->aData[$sWhat] = $sOn;
  15. }
  16. public function __destruct()
  17. {
  18. $this->oDb = Update('users', $this->aData, 'user_id = '.$this->iId);
  19. }
  20. }
  21. ?>
marekaaa
@bim2:

i jeśli chcę wyświetlić wszystkich użytkowników to jak to zrobić przy tej klasie?
plurr
nie wyciągaj bebechów na wierzch

do poczytania:
http://art-of-software.blogspot.com/2008/1...-smaczny-i.html
marekaaa
trudny ten tekst... chyba sobie jeszcze muszę poczytać o tej obiektowości po necie, nie jest to takie proste jak mi sie wydawało niestety
Quider
Na wortalu jest artykuł jak napisać FRAMEWORK, to Ci pomoże pisać CMS. Bez szkieletu nie napiszesz CMS, a jeśli nie chcesz pisać skorzystaj z tych już napisanych jak CodeIngniter, CakePHP, czy Symfony. Wtedy będziemy gadać, czy dobrze rozumiesz obiektowość. Teraz to takie rzucanie grochem o ścianę: "a może się przebije".

Pozdrawiam
PrinceOfPersia
Cytat(marekaaa @ 8.03.2009, 20:35:30 ) *
1) klasa baza_danych, w niej metody obsługujące połączenie, rozłączenie z bazą i jedna wysyłająca zapytanie, które otrzyma jako argument.

2) klasa uzytkownik, obiektem tej klasy jest pojedyńczy uzytkownik(tak powinno być?), mam w niej zmienne: nazwa_uzytkownika, haslo. Metody: dodaj_uzytkownika, usun_uzytkownika, edytuj_uzytkownika.

Może być. Ale najważniejsze to to, żeby po prostu wygodnie było Ci się tym posługiwać i mógł łatwo wprowadzać zmiany w projekcie, a nie konkretne zmienne i metody.


[quote name='marekaaa' date='8.03.2009, 20:35:30 ' post='581425']
Zacząłem pisać prostego CMSa, nie jestem pewien czy dobrze rozumiem co powinno być obiektem, klasą, metodą.
[/quote ]
Co zechcesz. W programowaniu nie ma zazwyczaj jednego prawidłowego rozwiązania. Dany problem można zwykle rozwiążać na wiele różnych sposobów i od programisty i konkretnych potrzeb projektu zależy, które podejście obrać. Np. równie dobrze do obsługi bazy danych mógłbyś po prostu stworzyć po parę funkcji pomocniczych zamiast klasy i też byłoby dobrze. Dobrze, nie znaczy lepiej, tylko po prostu tak samo dobrze by Ci działała strona. Inna sprawa, że klasy i obiekty są częściej po prostu wygodniejsze w obsłudze dla programisty.

Tak samo do obsługi użytkowników równie dobrze mógłbyś mieć dwie klasy - osobno Uzytkownik i osobno Uzytkownicy, ale nic nie szkodzi na przeszkodzie, jeżeli Ci tak będzie wygodnie, żebyś kod do obslugi zarowno pojedynczego uzytkownika jak i całej listy uzytkownikow umieścił w jednej klasie Uzytkownik i pisać coś takiego:

Kod
Uzytkownik::pobierzWszystkich();


jak chcesz pobrac listę uzytkownikow, i coś takiego:

Kod
uzytkownik = Uzytkownik::aktualnieZalogowany();


jak chcesz pobrać tylko jednego uzytkownika. Rozumiesz, nie ma jednoznacznych rozwiązań. To nie egzamin w szkole, to programowanie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.