PHP - obiektowe PHP - Serwis WWW

DZIAŁANIE: Zobacz : tutaj
 

Kod:

Klasa - serwis.inc.php :

index.php :

kontakt.php :

oferta.php :

Ewentualne Objaśnienia:

Oto bardzo ważny przykład pokazujący jak stworzyć serwis WWW oparty o programowanie obiektowe - istotną rzeczą tutaj jest to, że w tym przykładzie generalnie każda pod strona jest bardzo podobna do głównej - zmienia się jedynie zawartość. W pod stronie oferta są jednak zmiany, do czego dojdziemy.

Samo stworzenie strony tutaj jest banalne - wystarczy stworzyć nowy obiekt i wywołać funkcję piszącą serwis - wcześniej jeszcze określić zawartość danej części strony.
Jak widać najbardziej obszerny tutaj jest kod naszej klasy Serwis zobaczmy :
- mamy 4 składowe określające tytuł serwisu, słowa kluczowe, treść (zawartość) oraz tablicę zawierającą nazwy oraz linki do menu strony.
- określamy funkcję __set - jak już wiecie to specjalna funkcja odpowiadająca za wpisanie wartości do danej zmiennej klasy
- no i mamy funkcję pierw wypisującą tytuł serwisu - pobiera go z naszej składowej $tytul rzecz jasna, tak samo funkcje do wyświetlania słów kluczowych, stylu CSS, nagłówka oraz stopki serwisu - te funkcje są bez argumentowe, po prostu wypisują HTMLowe kody
- funkcja do wyświetlania menu posiada 1 argument - $menu, który powinien być tablicą na podstawie której wypisywanie jest proste menu HTMLowe czyli po prostu hiperłącza. Jak łatwo się domyślić skorzystamy tutaj z zadeklarowanej wcześniej tablicy również o nazwie $menu
- no i najważniejsza funkcja wyświetlająca cały kod, cały serwis funkcja pokazSerwis co ona robi :
    - wyświetla znaczniki HTML i HEAD wyświetla nasz tytuł, słowa kluczowe, styl CSS
- zamyka HEAD otwiera BODY, wyświetla nagłówek, następnie wyświetla menu z argumentem $this->menu co wskazuje, że funkcja ma skorzystać ze składowej $menu naszej klasy,
    - następnie wyświetla składową $tresc serwisu ( która dalej określamy już w kodzie właściwej części serwisu )
    - wyświetla stopkę
    - zamyka BODY oraz HTML

To generalnie jest bardzo proste - kilka funkcji "zapakowanych" w klasę. Początkowo programowanie obiektowe może wydawać się trudne, ale tak naprawdę jest proste.

Kiedy mamy naszą klasę wypadałoby z niej skorzystać aby stworzyć serwis i tak plik index.php :
- dołączamy naszą klasę
- tworzymy nowy obiekt typu Serwis
- określamy wartość składowej $tresc poprzez wpis $homepage->tresc = ' tutaj treść'; - co jak wiecie wywołuje funkcję specjalną __set wpisującą podaną przez nas zawartość do składowej tresc
- wywołujemy naszą funkcję wyświetlającą cały serwis czyli pokazSerwis - tworzy nam ona całą strukturę serwisu oczywiście jako treść serwisu uwzględniając to co przypisaliśmy składowej tresc

Proste to prawda ?? Jeżeli chcemy aby każda cześć serwisu była zbudowana na takiej zasadzie to szkoda żeby tworzyć ileś tam dokumentów i dla każdego powtarzać te same konstrukcję. Zawsze można też korzystać z plików dołączanych owszem można to niezłe zastosowanie.
Jednak ta koncepcja obiektowa jest bardzo dobra, tworzymy jedynie klasę - dalej już jedynie w każdym dokumencie należy tworzyć obiekt typu tej klasy oraz określić zawartość i tyle - dzięki zastosowaniu obiektowości każda pod strona to zaledwie maleńki kod. Widzicie funkcjonalność ?

Podobnie jak index zbudowana jest strona kontaktowa - obiekt + określenie zawartości, jednak jak zauważyliście część oferta jest troszkę inna - mianowicie pojawia się dodatkowe 2 menu. Jak to najprościej uzyskać ? Zawsze można skopiować nasz plik klasy i troszkę go zmodyfikować i podpiąć do naszej innej pod strony i stworzyć obiekt tej klasy itd. Jednak zawsze wiązałoby się to z tym, że kiedy zmienimy coś w naszej klasie pliku serwis.inc.php - będziemy musieli zrobić to również w tym drugim pliku klasy ( oczywiście jeżeli chcemy zachować podobieństwo ).

Dużo lepszym pomysłem jest dla naszej innej pod strony, która ma się nieco różnić stworzyć klasę potomną głównej i dokonać kilku zmian/unieważnień. I tak właśnie jest w naszym pliku oferta.php, zobaczmy :
- dołączamy naszą główną klasę
- tworzymy klasę SerwisOferta, która jest klasą potomną klasy Serwis
- określamy sobie w niej składową $mene2 - to tablica menu taka jak $menu w klasie Serwis - robimy to dlatego, że chcemy dla strony oferta wyświetlić dodatkowe menu
- piszemy funkcję piszSerwis - czyli skoro występuje ona również w klasie rodzica, a my ją tutaj piszemy raz jeszcze - unieważniamy ją - generalnie działa ona identycznie jak w klasie rodzica, jednak widać, że jest 1 nowy zapis : $this->pokazMenu($this->menu2); - czyli wywołujemy sobie funkcję wypisującą menu, jednak z parametrem, który jest tablicą zadeklarowaną w klasie potomnej. Wcześniej jest również wypisywane menu główne, czyli korzystamy z tablicy $menu klasy rodzica.
- tworzymy obiekt klasypotomnej
- określamy zawartość
- wywołujemy funkcję ( unieważnioną ) piszSerwis, która wyświetla to samo co  na innych częściach strony + drugie menu

Jeśli zwróciliście uwagę to linki naszego nowego menu nie działają - nie ma takich plików na serwerze po prostu nie było sensu ich tutaj tworzyć.
Zalet takiego rozwiązanie jest bardzo wiele - klasa wykonuje za nas sporo pracy, nie musimy wkładać generalnie żadnego wysiłku w stworzenie nowych stron, wszystko można łatwo zmieniać - zmieniając tylko odpowiednie rzeczy w klasie. Jednak rzecz jasna nic za darmo - takie działanie wymaga większej mocy procesora niż zwykłe załadowanie statycznej strony i wysłanie jej przeglądarce. Zawsze należy myśleć co i jak rozwiązać. Oczywiście polecam korzystanie z obiektowości jak najczęściej, jednak niekoniecznie należy generować całą stronę w ten sposób.