Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!

"OO" - Programowanie obiektowe w praktyce

Początki, czyli programowanie proceduralne

Załóżmy, że piszemy skrypt obsługujący użytkowników naszej strony, uwzględniający podstawowe operacje, takie jak tworzenie, pobieranie, wyświetlanie, edycja i usuwanie pozycji. Wiemy, że inne nasze skrypty też mogą w przyszłości chcieć odwołać się do tych danych, a nie chce nam się za każdym razem pisać zapytań, wydobywać potrzebnych informacji z tego co zwróciła baza itd. dlatego postanowiliśmy utworzyć funkcje pomocnicze. Umieszczamy je w osobnym pliczku, który możemy dołączyć gdziekolwiek chcemy. Standard, nie muszę chyba nic tłumaczyć. Kod tej biblioteczki może wyglądać tak:

function pobierz_uzytkownika($login) 
{
 $query = mysql_query("SELECT * FROM user WHERE login='".addslashes($login)."'");
 if (mysql_num_rows($query))
 return mysql_fetch_assoc($query);
 return false;
}

function wyswietl_uzytkownika($user)
{
 include_once 'Smarty.class.php';
 $smarty = new Smarty(); // tu mamy jakis dziwaczny twór, ale na razie jeszcze nie wiemy co to, ok? 
 $smarty->assign('user', $user);
 $smarty->display('o_uzytkowniku.tpl');
}

function dodaj_uzytkownika($login, $haslo, $nazwauzytk)
{
 $login = addslashes($login);
 $haslo = md5($haslo);
 $nazwauzytk = addslashes($nazwauzytk);
 mysql_query("INSERT INTO user(login, password, username) VALUES('$login', '$haslo', '$nazwauzytk');
 return (bool) mysql_affected_rows();
}

function edytuj_uzytkownika($login, $poprawki = array())
{
 if (isset($poprawki['password']))
 $poprawki['password'] = md5($poprawki['password']);
 $sql = 'UPDATE user SET ';
 foreach($poprawki as $parametr => $wartosc)
 $sql .= $parametr.'=\''.addslashes($wartosc).'\' ';
 $sql .= 'WHERE login=\''.addslashes($login).'\'';
 $query = mysql_query($sql);
 return (bool) mysql_affected_rows();
}

// itd. dla kazdej operacji...

Jak widzimy, nie wygląda to zbyt elegancko, choć sposób jest jak najbardziej poprawny i ciężko o lepszy, gdy piszemy strukturalnie. Nazwy funkcji są raczej długie, ale muszą być takie, aby używający ich kod był przejrzysty. Może w angielskim nazewnictwie byłoby trochę krócej, ale wiecie - ustawa o ochronie języka każe szerzyć polskość na wszystkich frontach, więc i tutaj piszemy jak się da, czyli po "polskawemu". Przynajmniej na tym etapie.

Zapodajmy przykładem kodu, w którym używamy naszych funkcji:

require 'lib-uzytkownicy.php';

// wyswietlenie strony uzytkownika wg. podanego loginu
$uzytkownik = pobierz_uzytkowika('Nalfein');
if ($uzytkownik)
 wyswietl_uzytkownika($uzytkownik);
else
 wyswietl_formularz_rejestracji(array('login' => 'Nalfein'));

Oprócz długich nazw funkcji, które musimy wklepywać razi bardzo "ścisły" format danych przekazywanych do nich. Np. co zrobimy, jeśli zapragniemy wyszukiwać użytkownika nie po loginie, ale np. po emailu? Zmienić typ argumentu w funkcji pobierz_uzytkownika() na tablicę (klucz => wartosc)? Wtedy jeszcze bardziej będziemy musieli się napisać przy wywołaniu. A gdy zapragniemy dodać taki sam zestaw operacji dla, powiedzmy, artykułów to już mamy raz tyle funkcji, które musimy napisać. I choć będą one bardzo do siebie podobne, będziemy je pisali od zera lub co najwyżej skopiujemy identyczne fragmenty i powielimy kod. ?mudne pisanie funkcji i niezbyt wygodne ich używanie. Ale da się to rozwiązać w inny sposób...

Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (3)
:))
Piątek 11 Kwiecień 2008 2:45:35 pm - lonas

Bardzo fajne ale ... czemu takie krotkie wiecej !! :)

koment
Czwartek 26 Lipiec 2007 10:46:57 pm - plurr <xytrass_at_o2.pl>

bardzo fajny artykul, nareszcie jasniej zrozumialem klasy ;p Tylko gdzie reszta ? :))

To są podstawy?
Niedziela 22 Lipiec 2007 10:36:39 am - solari_de_marco <solari_de_marco_at_interia.pl>

Kurs niby podstawy a .... Potrafię dobrze programować strukturalnie i chciałem się nauczyc OO i mi to ciężko idzie... :/ Myślałem ze tu się czegoś nauczy, niby oki ale ... jak mam się połączyć z bazą danych? Gdzie jest wyjasnienie ze trzeba wybrac baze danych, połączyc sie i itp, jak podajesz kod wykożystania klas to już pokaż jak się łaczyć z tą bazą danych !!

Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2020 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System