Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
PHP. Programowanie
obiektowe
Autor: Peter Lavin
Tumaczenie: Julia Szajkowska
ISBN: 83-246-0697-1
Tytu oryginau: Object Oriented PHP
Format: B5, stron: 232
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Jzyk PHP od dawna cieszy si zasuonym uznaniem wrd twrcw witryn WWW
i aplikacji internetowych. Prosta skadnia, ogromne moliwoci i dostp na licencji
open-source przysporzyy mu liczne grono zwolennikw. W najnowszej wersji PHP,
oznaczonej numerem 5, twrcy jzyka wprowadzili kolejn ciekaw i niezwykle
uyteczn cech programowanie obiektowe. Otwiera to przed programistami nowe
moliwoci tworzenia wydajnych i bezpiecznych aplikacji. Dla tych, ktrzy nie znaj
jeszcze zasad programowania obiektowego, PHP 5 jest idealnym narzdziem do nauki,
bowiem stosowany w nim model obiektowy jest niezwykle prosty i czytelny.
PHP. Programowanie obiektowe to wietny podrcznik, dziki ktremu opanujesz
moliwoci i sekrety tej techniki. Czytajc go, poznasz nie tylko jzyk PHP 5, ale take
oglne zasady programowania obiektowego. Dowiesz si, czym s obiekt, klasa,
konstruktor, destruktor, dziedziczenie, polimorfizm i interfejs. Nauczysz si tworzy
wasne klasy i korzysta z nich w projektach. Przeczytasz take o komunikacji z baz
danych, stosowaniu jzyka XML, protokou SOAP oraz zaznajomisz si
z automatycznym tworzeniem dokumentacji kodu.
Podstawy programowania obiektowego
Obiektowe cechy PHP 5
Tworzenie klas
Poczenia z bazami danych
Dziedziczenie i interfejsy
Przetwarzanie kanaw RSS
Korzystanie z protokou SOAP
Generowanie dokumentacji za pomoc klas Reflection
Praca z SQLite
Wydawnictwo Helion
ul. Kociuszki 1c
44-100 Gliwice
tel. 032 230 98 63
e-mail: helion@helion.pl
PODZIKOWANIA .................................................................................... 11
WSTP ....................................................................................................... 13
1
JAK SPLTAN SIE PLECIEMY .......................................................... 21
Czy naprawd potrzebujemy obiektw? ...............................................................................22
Tylko jzyk skryptowy .......................................................................................................22
Obiekty tylko dla wielkich ..................................................................................................23
Zostawcie go w spokoju ....................................................................................................24
Zwikszona zoono .......................................................................................................24
Kultura PHP ...........................................................................................................................24
2
PODSTAWY PROGRAMOWANIA OBIEKTOWEGO .................................... 27
Klasa .......................................................................................................................................28
Klasy kontra rekordy ..........................................................................................................28
Spjna cao ......................................................................................................................28
Obiekty s instancjami ........................................................................................................29
Obiekty potrzebuj modyfikatorw dostpu .........................................................................29
Ponowne wykorzystanie obiektu i dziedziczenie ...................................................................30
Dziedziczenie wielokrotne .................................................................................................30
Mie ciastko i zje ciastko .................................................................................................30
Co dalej? .................................................................................................................................31
3
NOWE CECHY OBIEKTOWE W PHP 5 ........................................................33
Modyfikatory dostpu ........................................................................................................... 34
Klasy wbudowane .................................................................................................................. 34
Wyjtki ............................................................................................................................... 35
Klasy baz danych ................................................................................................................ 35
Usugi internetowe ............................................................................................................ 35
Klasy Reflection ................................................................................................................. 36
Iterator .............................................................................................................................. 36
Wsteczna kompatybilno ..................................................................................................... 36
Przekazany przez referencj ............................................................................................. 37
Prognozy ............................................................................................................................ 37
Co dalej? ................................................................................................................................ 38
Adaptacja PHP 5 ................................................................................................................ 38
Kompromis ........................................................................................................................ 39
4
POKA ODROBIN KLASY .......................................................................41
Projekt ................................................................................................................................... 42
Definiowanie problemu ..................................................................................................... 42
Niekoniecznie kod Leonarda ................................................................................................. 43
Konstruktor ....................................................................................................................... 44
Odwoywanie si do zmiennych wystpienia .................................................................... 44
Metody osonowe .............................................................................................................. 45
Tworzenie egzemplarza ........................................................................................................ 46
Co osignlimy? .................................................................................................................... 47
Ale czy poleci? ....................................................................................................................... 48
5
ZMIEMY NASZ KLAS ..........................................................................49
Przejcie do PHP 5 ................................................................................................................ 49
Modyfikatory dostpu ....................................................................................................... 50
Konstruktor ....................................................................................................................... 52
Modyfikowanie klasy ............................................................................................................. 53
Przebudowa konstruktora ................................................................................................. 53
Filtrowanie zawartoci ....................................................................................................... 55
Przywrcenie pierwotnej postaci tablicy ........................................................................... 57
Podsumowanie zmian ............................................................................................................ 58
6
KLASA THUMBNAILIMAGE ......................................................................59
Zadania Projektanta ............................................................................................................... 60
Naladowanie Projektanta ................................................................................................. 60
Pomoc ze strony funkcji PHP ............................................................................................ 60
Spis treci
Spis treci
9
KLASY BAZY DANYCH .............................................................................91
Korzystajc z tego, co znane ................................................................................................. 91
Jedn kostk cukru czy dwie? ................................................................................................ 92
Klasa MySQLConnect ............................................................................................................ 92
Zmienne wiadome klasy .................................................................................................. 93
Tworzenie kolejnych pocze .......................................................................................... 94
Droga do celu rozpoczyna si tutaj ................................................................................... 95
Klasa MySQLResultSet ........................................................................................................... 95
Nawigator stron .................................................................................................................... 97
Sortowanie, filtrowanie i wydobywanie ............................................................................ 98
Przemierzanie zestawienia wynikw ................................................................................. 99
Nawigator potrzebuje wskazwek ................................................................................... 99
Co po nawigatorze? ............................................................................................................. 101
10
Z DZIEDZICZENIEM LEPIEJ .....................................................................103
Standardowa biblioteka PHP Standard PHP Library ...................................................... 104
Rozszerzenie klasy przez dziedziczenie .............................................................................. 104
Klasa wyjtkw ................................................................................................................ 105
Sowo kluczowe protected .............................................................................................. 105
Sowo kluczowe final ....................................................................................................... 106
Wicej metod magicznych ............................................................................................... 106
Zamiana bdw na wyjtki ................................................................................................. 107
Klasa MySQLException ........................................................................................................ 108
Zmiany w klasie MySQLConnect ........................................................................................ 110
Pchn klas do przodu ................................................................................................... 111
Przechwytywanie wyjtkw ................................................................................................ 112
Implementacja interfejsu ...................................................................................................... 113
Kilka sw o interfejsie Iterator ....................................................................................... 114
Implementacja ................................................................................................................. 115
Zostawmy j niezdefiniowan ......................................................................................... 117
Implementacja i dostp .................................................................................................... 118
Iteracja przez MySQLResultSet ....................................................................................... 119
Co dalej? .............................................................................................................................. 119
11
ZAAWANSOWANE POJCIA Z ZAKRESU PROGRAMOWANIA
OBIEKTOWEGO ........................................................................................121
Klasy abstrakcyjne ................................................................................................................ 122
Metody prywatne nie mog by abstrakcyjne ................................................................. 122
Interfejs czy klasa czysto abstrakcyjna? ............................................................................ 123
Polimorfizm ......................................................................................................................... 123
Kontrola nad uyciem funkcji .......................................................................................... 124
Spis treci
Spis treci
14
TWORZENIE DOKUMENTACJI DZIKI KLASOM REFLECTION ...............161
Czym s klasy reflection? ..................................................................................................... 162
Grupa klas typu reflection ................................................................................................... 162
Klasa Reflection ................................................................................................................ 163
Klasa ReflectionClass ....................................................................................................... 164
Obiekty ReflectionMethod i ReflectionParameter ........................................................... 165
Funkcje wbudowane ........................................................................................................ 166
Jak sformatowa tekst? ........................................................................................................ 166
Klasa Documenter ............................................................................................................... 166
Opis klasy Documenter ................................................................................................... 167
Opisywanie metod i danych skadowych ......................................................................... 168
Konstruktor ..................................................................................................................... 169
Modyfikatory metod i danych skadowych ...................................................................... 169
Uywanie klasy Documenter ............................................................................................... 170
Tworzenie bocznego menu klas i interfejsw ................................................................. 171
Formatowanie szczegw dokumentacji ....................................................................... 171
Formatowanie komentarzy dla klasy Documenter ......................................................... 173
Reflecting ............................................................................................................................. 174
15
ROZBUDOWA ROZSZERZENIA SQLITE ...................................................175
Krtki przegld .................................................................................................................... 176
Struktura katalogu ............................................................................................................... 176
Jak si to robi? ...................................................................................................................... 177
Zaczynajmy .......................................................................................................................... 178
Tworzenie tabeli .................................................................................................................. 179
Widoki ................................................................................................................................. 180
Wyzwalacze ......................................................................................................................... 180
Implementacja SQLite w PHP ............................................................................................. 182
Rozbudowa klasy SQLiteDatabase ...................................................................................... 182
Przesonite metody zapytania ............................................................................................ 183
Komunikaty o bdach ..................................................................................................... 185
Metody zapyta ............................................................................................................... 185
Metody uytkowe ................................................................................................................ 189
Pobieranie metadanych ................................................................................................... 191
Uywanie metadanych ..................................................................................................... 191
Funkcje zdefiniowane przez uytkownika ........................................................................... 193
Korzystanie z SQLite i jego ograniczenia ............................................................................. 195
16
UYWANIE PDO ......................................................................................197
Wady i zalety ....................................................................................................................... 198
Zmienianie aplikacji SQLite ................................................................................................. 198
Zmiany w kodzie ............................................................................................................. 198
Spis treci
Spis treci
Rozdzia 2. okreli modyfikatory dostpu jako zasadniczy element jzyka obiektowego. PHP 5 dostarcza tu wszystkiego, czego moglibymy wymaga. Poprzednie wersje nie zapewniay ochrony danych, wszystkie elementy klasy byy powszechnie dostpne. Brak modyfikatorw dostpu najprawdopodobniej najbardziej
odstrcza od pracy z obiektami w starszych wersjach PHP.
UWAGA
Pojciem cile zwizanym z ochron danych jest ukrywanie informacji. Modyfikatory dostpu pozwalaj na tak operacj, dziki wprowadzeniu interfejsu (omwionego w rozdziale 2.). To samo odnosi si do hermetyzacji obiektu.
Kady jzyk obiektowy posiada swoje wbudowane klasy i PHP nie jest tu wyjtkiem. PHP wprowadza bibliotek Standard PHP Library (SPL), ktra jest rdem wielu gotowych klas i interfejsw. Wersja 5.1, w zalenoci od konfiguracji
PHP, posiada ponad 100 klas i interfejsw cakiem rozsdny wzrost w stosunku
do wersji 5.0.
Gotowe obiekty znacznie przyspieszaj tempo pracy nad stron, a rdzenne
klasy pisane w C dostarczaj dodatkowych moliwoci. Nawet jeli nie odpowiadaj one dokadnie potrzebom programisty, to mona je atwo rozszerzy, a do
uzyskania waciwego efektu.
UWAGA
34
Liczba klas nie pozwala omwi ich wszystkich w tej ksice, szczeglnie e nie
wszystkie s dobrze udokumentowane. Skupimy si na tych, ktre s z jakich
wzgldw wyjtkowo godne uwagi.
Rozdzia 3
Wyjtki
Wszystkie jzyki obiektowe maj wbudowan obsug wyjtkw, co jest obiektowym odpowiednikiem obsugi bdw. Aby skorzysta z tej funkcji, programista
posuguje si sowami kluczowymi try, catch i throw. Blok instrukcji try zawiera
kod, ktry moe spowodowa wystpienie bdw. Jeli takowy si pojawi, jest
wyrzucany i przechwytywany przez blok catch. Przewaga wyjtkw nad bdami sprowadza si do moliwoci ich centralnego obsuenia, co nie zamieca tak
kodu. Wyjtki znacznie zmniejszaj ilo kodu odpowiedzialnego za wykrywanie
i obsug bdw. Dodatkowo gotowa, wbudowana klasa obsugujca wyjtki jest
doskona podstaw do napisania wasnej klasy obsugi wyjtkw oczywicie
przez dziedziczenie. (Przejcie z puapkowania bdw do obsugi wyjtkw zostanie szczegowo opisane w dziale Zamiana bdw na wyjtki).
Usugi internetowe
W PHP 5 obsuga XML (Extensible Markup Language) zostaa powierzona zestawowi narzdzi libxml2 (http://www.xmlsoft.org/). Zmieniono kod lecy u podstaw Simple API dla XML (SAX) i DOM. Dodatkowo obsuga DOM jest zgodna
ze standardem wprowadzonym przez World Wide Web Consortioum.
Unifikacja obsugi XML przez libxml2 jest skierowana na bardziej wydajn
i prostsz w utrzymaniu implementacj. Jest to o tyle wane, e obsuga XML
w PHP 4 jest saba, a usugi internetowe powoduj wystpienie problemw,
dla ktrych jedynym rozwizaniem jest programowanie obiektowe.
35
Klasy Reflection
Klasy Reflection wbudowane w PHP 5 pozwalaj dokona introspekcji (udostpni wraz ze skompilowanym komponentem informacje o jego metodach, waciwociach itp.) obiektu i odtworzy kod rdowy. Przecitny projektant moe czu
pokus, by zignorowa te klasy, ale rozdzia 14. udowodni ich uyteczno podczas
automatyzacji wykonywania najmniej lubianego zadania dokumentowania kodu.
Iterator
Poza wbudowanymi klasami, PHP 5 szczyci si rwnie wbudowanymi interfejsami. Iterator jest najwaniejszym z nich, poniewa wywodzi si z niego spora
liczba klas i interfejsw. Szczegy przedstawi rozdzia 10.
36
Rozdzia 3
Prognozy
Samo wymienienie kolejnych punktw wstecznej kompatybilnoci nie nawietla
odpowiednio sprawy, ktra moe powodowa kontrowersje. Kada zmiana w ustalonym ju jzyku programowania powoduje konflikt interesw. Wprowadzenie
zmian spotyka si z oglnym potpieniem, ale ich brak rwnie. Wemy na przykad niespjnoci w nazewnictwie funkcji ich pozostawienie zapewnia kompatybilno ze starszymi wersjami, ale takie rozwizanie spotka si ze suszn
krytyk za brak spjnoci jzyka.
Oczywicie zerwanie wszelkich wizi z poprzednimi wersjami spowoduje, e
cz istniejcych ju kodw przestanie dziaa. Decyzja, kiedy i w ktrych miejscach przerwa cigo jzyka, nie naley do prostych, ale omawiane tu wprowadzenie przekazywania obiektw przez referencje, pomimo pewnych niedogodnoci, jakie powoduje, samo broni si przed krytyk. Pewnym mona by tylko
tego, e kada zmiana spowoduje podniesienie si gosw krytyki. Oczywicie
komunikaty o pojawieniu si w kodzie niezalecanych funkcji s doskonaym sposobem na poinformowanie projektantw o nadchodzcych zmianach.
37
Adaptacja PHP 5
Z tego, co dotd napisaem, wynika, e PHP 5 jest dopiero na pocztku swojej
drogi. Ale co o nim wiemy: istnieje od ponad roku, a ju wykryto w nim i naprawiono wiele bdw. Jest wersj stabiln. Wszdzie tam, gdzie projektanci maj
kontrol nad konfiguracj serwera WWW, przejcie do PHP 5 bdzie posuniciem
korzystnym. Ale projektanci nie zawsze maj w tej kwestii wiele do powiedzenia.
W sytuacji, kiedy nie maj kontroli nad hostem WWW, decyzja o aktualizacji pozostaje poza ich zasigiem.
PHP pado ofiar wasnego sukcesu. Popularno i stabilno PHP 4 spowolniy adaptacj PHP 5. PHP 4 jest w peni rozwinitym jzykiem, o ktry oparto
mnstwo aplikacji open source i komercyjnych. Oczywicie pewne rodowiska
(szczeglnie te, ktre stosuj hosting dzielony) pozostaj niechtne zmienianiu
ustalonego porzdku rzeczy, co owocuje spowolnionym przechodzeniem do PHP 5.
UWAGA
38
Rozdzia 3
Kompromis
Powszechne korzystanie z PHP 5 jest tylko kwesti czasu. Jednak piszc t ksik, skoniem si ku pogldowi, e, przynajmniej na razie, wielu programistw
zechce pisa swoje aplikacje zgodnie ze standardem PHP 4. Dlatego tam, gdzie to
moliwe, obok kodu PHP 5 pojawia si wersja pisana w PHP 4.
W pewnym sensie PHP 5 jedynie wprowadza formalny zapis funkcji dostpnych ju w PHP 4. Na przykad, rozsdniej jest wpisa metody dostpowe do
zmiennych klasy w PHP 4, ni nadawa im warto lub odczytywa bezporednio
(cho PHP 4 dopuszcza tak moliwo). Wymaga to samodyscypliny, ale zaowocuje, umoliwiajc atwiejsze dostosowanie do standardu PHP 5. Dodanie restrykcyjnych modyfikatorw dostpu do kodu, ktry ju posiada metody dostpowe,
jest zadaniem stosunkowo prostym. Skutki zaoenia, e kod bdzie kiedy aktualizowany, jedynie poprawiaj jego czytelno.
To wszystko, jeli chodzi o teori programowania obiektowego. W kolejnych
rozdziaach zajmiemy si praktyk.
39