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

"OO" - Programowanie obiektowe w praktyce

Tworzymy klasę w PHP

class Czlowiek
 {
  var $imie;
  var $drugie_imie;
  var $nazwisko;
  var $plec;
  var $data_urodzenia;
  var $wzrost = 60; // wzrost czlowieka po urodzeniu
  var $mamusia;
  var $tatus;
       
  function __construct($mamusia = null, $tatus = null)
  {
  $this->mamusia = $mamusia;
  $this->tatus = $tatus;
  }
       
  function rosnij($o_ile = 1) 
  {
  $this->wzrost += $o_ile;
  }
       
  function ochrzcij($imie)
  {
  if ($this->drugie_imie)
  throw new Exception('Nie można dwa razy ochrzcić tego samego człowieka');
  $this->drugie_imie = $imie;
  }
       
 }

Przyjrzyj się temu kodowi. Deklaracja klasy (bo tak się nazywa definicja nowego typu) rozpoczyna się zawsze od słowa kluczowego class. Po nim podajemy pod jaką nazwą ma być widoczna. Wielkość liter nie ma znaczenia, CzLoWiEk i CzloWiek to dla PHP ta sama klasa. Następnie w nawiasach klamrowych podajemy "właściwą" definicję naszej klasy, zwaną popularnie ciałem klasy. Jak widzisz, możemy w nim dostrzeć dwa odróżniające się od siebie bloki - z deklaracjami zmiennych, właściwości naszej klasy i z definicjami funkcji, metod naszej klasy.

Właściwości, cechy naszego obiektu deklarujemy w PHP4 za pomocą słowa kluczowego var (PHP5 wprowadza nowe, których możemy tu użyć, o tym będzie dalej), podając identyfikator, pod jakim właściwość ma być widoczna. Tutaj wielkość liter ma znaczenie - przypomnijmy sobie, PHP ignoruje wielkość liter w nazwach funkcji i klas, ale nie w przypadku zmiennych. Zwyczajowo jednak przyjmuje się konwencję nazywania właściwości z małych liter, oddzielając wyrazy podkreślnikiem.

Możemy przypisać wartość domyślną właściwości - wartość, jaką przyjmie zmienna zaraz po utworzeniu obiektu. Tutaj taką wartość liczbową przypisaliśmy wzrostowi. W ten sposób możemy jednak inicjować właściwości tylko wartościami, które interpreter jest w stanie obliczyć w momencie parsowania ciała klasy, a więc ciągami znaków, liczbami oraz wyjątkowo tablicami. Nie możemy tam wykonywać żadnych operacji, inicjować właściwości innymi obiektami itd. Deklaracja:

var $mamusia = new Czlowiek;

spowoduje błąd. Takie czynności możemy wykonać w konstruktorze - specjalnej metodzie, która widnieje tutaj jako funkcja o nazwie __construct().

Metody jak widzisz deklarujemy za pomocą słowa kluczowego function, co od razu sugeruje, że możemy ją traktować jak funkcję. I tak też jest - nic nie przeszkadza, żeby tutaj "żywcem" wkleić funkcję z naszej proceduralnej biblioteki, którą utworzyliśmy w poprzednim rozdziale. Tak robią niektórzy twórcy "obiektowych" bibliotek, robiąc z nich swoiste pojemniki na funkcje. My nauczymy się wykorzystywać je zgodnie z przeznaczeniem, w kontekście obiektu.

Metodami klasy są po prostu takie specjalne funkcje operujące na danych naszej klasy i danych przekazanych z zewnątrz poprzez argumenty. Dobrzy projektanci klas starają się nie używać w metodach zmiennych globalnych, tak, aby klasa była samowystarczalna i działała dobrze, nawet gdy komuś zechce się zmienić coś poza nią (np. nazwę lub - co gorsza, bo trudniej to wykryć i często się dzieje przez przypadek - zawartość zmiennej globalnej). Zamiast tego np. w konstruktorze przypisują właściwościom wartości zmiennych globalnych, co jest już o niebo lepszym rozwiązaniem, choć są jeszcze lepsze sposoby (poznamy je później).

W metodach używamy słowa kluczowego i jednocześnie pseudo-zmiennej $this - jego istnienie jest jedną z cech, odróżniających metody klas od zewnętrznych funkcji. Jak kilka razy mówiłem, klasa jest tylko typem, a obiekt jest przedmiotem, wytworem ulepionym z foremki z wygrawerowaną nazwą naszej klasy. Taki twór zwiemy instancją danej klasy. Gdy napiszemy gdzieś w kodzie:

$dziecko = new Czlowiek($mama, $tata);
 $dziecko->rosnij(160);

to po utworzeniu nowego człowieczka (do tworzenia obiektów jak widzisz służy słowo kluczowe new) zostanie wywołana metoda rosnij() z argumentem '160', a pod identyfikatorem $this znajdzie się referencja do zmiennej $dziecko. Używając jej możemy uzyskać dostęp do składowych obiektu - właściwości i innych metod. Tutaj np. po wywołaniu metody rosnij() do właściwości wzrost naszego obiektu na rzecz którego jest wywoływana metoda dodawana jest wartość przekazanego argumentu. Podobnie jak w przypadku "zwykłych" funkcji, tak i w przypadku metod możemy przypisywać domyślne wartości argumentom na podobnych zasadach jak właściwościom (wartość inicjująca musi być stałą, wartością którą interpreter może utworzyć bez odwoływania się do zewnętrznych danych).

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