PHP - obiektowe PHP - kapsułkowanie
| DZIAŁANIE: |
gienek Bartek |
Kod:

Ewentualne Objaśnienia:
Już kiedyś zacząłem omawiać programowanie obiektowe - tak bardzo troszeczkę. Jak już wspominałem od wersji 5 języka PHP mamy do czynienia z możliwością naprawdę solidnego programowania zorientowanego obiektowo w PHP. Postaram się w najbliższych lekcjach omówić jeszcze kilka spraw związanych z obiektowym PHP.
W moim pierwszym przykładzie tutaj mamy banalną klasę z jednym atrybutem (
pamiętacie mówiłem kiedyś, że atrybuty deklarujemy nie tylko poprzez
modyfikatory zasięgu ale również głównie we wcześniejszych wersjach PHP poprzez
słowo kluczowe var - co też tutaj uczyniłem ). Dalej tworzymy sobie obiekt tej
klasy oraz wpisujemy wartość składowej imie i ją wyświetlamy.
Mamy więc tutaj generalnie bezpośredni dostęp do atrybutów klasy - poza klasą.
Nie jest to najlepsze rozwiązanie, ale do zalet programowania obiektowego należy
wspieranie kapsułkowania. Własność tą można wymusić poprzez funkcje
__get oraz __set .
W takim przypadku zamiast uzyskiwać bezpośredni dostęp do klasy piszemy tzw.
funkcje dostępowe co sprawia, że cały dostęp zamykamy w jednym fragmencie
kodu.
I taki właśnie jest drugi banalny przykład ( druga klasa ). W tej klasie
funkcje __get oraz __set umożliwiają dostęp do atrybutu $imie. Funkcja __get po
prostu zwraca wartość atrybutu natomiast __set pobiera dwa parametry - nazwę
atrybutu klasy oraz wartość jaką należy mu przypisać.
Funkcji takich nie trzeba wywoływać - podwójne podkreślenie w nazwie informuje
PHP, że mają one specjalne znaczenie ( tak jak konstruktor i destruktor ).
Kiedy utworzymy obiekt $ludzisko. Dalej jak widać podobnie jak poprzednio
mamy zapis wpisania wartości do zmiennej klasy - wygląda tak samo jak
poprzednio, ale nie jest to już bezpośredni dostęp - wywoływana jest
niejawnie funkcja __set , imie to w naszej funkcji rzecz jasna $nazwa, a
'Bartek' wartosc - czyli rzecz jasna funkcja set dla atrybuty imie tej klasy
ustawi wartość Bartek .
Podobnie kolejny zapis powoduje niejawne wywołanie funkcji __get z parametrem
imie czyli jest to w naszej funkcji argument $nazwa, co oczywiście dalej
powoduje wypisanie wartości atrybutu $imie klasy ludziska .
Należy zawsze pamiętać też o tym, że może być tak, że zależy nam aby do
naszych atrybutów nie wpisywać jakiś wartości - na przykład chcemy tylko liczby
od 4 do 60 więc w funkcji set należy ( w jej ciele ) określić warunek - jeżeli
zostanie spełniony wpisywana jest wartość do odpowiedniej składowej.
Wszystko jest to wygodne - w razie jakiś ograniczeń, musu zmiany należy tego
dokonać tylko w jednym miejscu - deklaracjach funkcji dostępowych.
Oczywiście te dwie klasy nie mają żadnego specjalnego zadania ani nie będą raczej nikomu potrzebne, ale myślę że odpowiednio obrazują temat tej lekcji.