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.