You are on page 1of 15

IDZ DO

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

Jeli chcesz pozna PHP 5 i zasady programowania obiektowego,


ta ksika jest wanie dla Ciebie

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

Klasa ThumbnailImage ............................................................................................................61


Dane skadowe ...................................................................................................................61
Przebudowa konstruktora .................................................................................................61
Dwa sposoby skonstruowania obiektu ..............................................................................62
Zachowanie wewntrzne metody prywatne ................................................................63
Czy musi by prywatna? .....................................................................................................64
Metoda pomocnicza ...........................................................................................................64
Metody publiczne ...............................................................................................................65
Czyszczenie pamici ..........................................................................................................65
Wywietlanie obrazu ..........................................................................................................66
Metody pobierz i ustaw ...............................................................................................66
Jako obrazu .....................................................................................................................67
Kiedy zmienia jako? .......................................................................................................68
Wywietlanie miniaturki .........................................................................................................68
Zbierajc to razem .................................................................................................................69
Co dalej? .................................................................................................................................70
7
BUDOWANIE KLASY PAGENAVIGATOR .................................................. 71
Jak zachowuje si nawigator? .................................................................................................72
Rne rodzaje wyszukiwa ................................................................................................72
Jak to bdzie wyglda? ..........................................................................................................72
Kod .........................................................................................................................................73
Konstruktor ........................................................................................................................76
Stop zemu zachowaniu .....................................................................................................76
Inne wywoania metod konstruktora .................................................................................77
Metoda getNavigator .............................................................................................................79
Przejd do pierwszej i Przejd do poprzedniej ...........................................................79
Ciao nawigatora ................................................................................................................80
Przejd do nastpnej i Przejd do ostatniej .................................................................81
Biecy i ostatni numer strony ...........................................................................................81
Co dalej? .................................................................................................................................82
8
WYKORZYSTANIE KLASY PAGENAVIGATOR .......................................... 83
Zmiany w klasie DirectoryItems ............................................................................................84
CSS i moliwo ponownego wykorzystania .........................................................................84
Stronicowanie z klas .............................................................................................................86
Wywietlanie fragmentu tablicy .........................................................................................88
Tworzenie obiektu PageNavigator ....................................................................................89
Co dalej? .................................................................................................................................90

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

Klasy statyczne .....................................................................................................................125


Statyczne klasy matematyczne .........................................................................................125
Instancje klas statycznych .................................................................................................126
Jak zapobiec tworzeniu instancji klasy statycznej? ............................................................127
Wzorce projektowe .............................................................................................................127
Wzorzec Singleton ...........................................................................................................127
Ktra implementacja? .......................................................................................................129
Co dalej? ...............................................................................................................................129
12
UTRZYMAJMY WIEO ...................................................................... 131
SimpleXML ...........................................................................................................................132
XML .................................................................................................................................132
RSS ...................................................................................................................................133
Budowa pliku RSS .............................................................................................................133
Odczyt wtku ...................................................................................................................135
Przeszukiwanie zawartoci strony .......................................................................................136
Funkcje Google API ..........................................................................................................136
Technologia AJAX ............................................................................................................137
Instalacja protokou SOAP ...............................................................................................137
Rozszerzenie SOAP .........................................................................................................137
Klient SOAP .....................................................................................................................138
Test dziaania ....................................................................................................................141
Technologia AJAX wykorzystana do przegldania wynikw ...........................................142
Uproszczenie zoonych zada ............................................................................................143
A moe proceduralnie? ........................................................................................................143
13
WICEJ METOD MAGICZNYCH ............................................................... 145
Metody __get i __set ............................................................................................................146
Czy byo warto? ...............................................................................................................147
Metody __isset i __unset .....................................................................................................148
Metoda __call .......................................................................................................................149
Metoda __autoload ..............................................................................................................150
Metody __sleep i __wakeup ................................................................................................151
Metoda __clone ...................................................................................................................152
Gdzie jest Wodek? ..........................................................................................................153
Operator clone ................................................................................................................154
Klasy agregowane .............................................................................................................154
Metoda pobierania dla danych skadowych obiektu klasy zoonej ....................................157
Klonom wstp wzbroniony ..............................................................................................158
Kilka sw o przecianiu .....................................................................................................158

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

Dodatkowe moliwoci PDO ..............................................................................................201


Klasa PDO ........................................................................................................................201
Klasa PDOStatement .......................................................................................................202
Ocena ...................................................................................................................................204
Czy to wity Graal? .........................................................................................................205
A
KONFIGURACJA PHP 5 .......................................................................... 207
Ustawienia php.ini ................................................................................................................208
E_STRICT ........................................................................................................................209
Nie obcinamy dwa razy ....................................................................................................210
B
TABELA KONWERSJI: PHP 4 I PHP 5 ..................................................... 211
SOWNICZEK .......................................................................................... 215
SKOROWIDZ ........................................................................................... 221

Spis treci

PHP 3 POJAWIO SI W POOWIE 1998 ROKU, MAJC JU, NIEJAKO


MACHINALNIE, WBUDOWANE PEWNE PODSTAWOWE MOLIWOCI PROGRAMOWANIA OBIEKTOWEGO, KTRE DAWAY NOWE MOLIWOCI
dostpu do tablic.1 W kolejnej, czwartej wersji, wypuszczonej
w poowie 2000 roku, nie pojawiy si adne znaczce zmiany. Nadal
udostpniano podstawowe funkcje programowania obiektowego
tworzenie klas i dziedziczenie.
Wraz z pojawieniem si wersji 5. w 2004 roku, okazao si, e wiele rzeczy
mona byo ulepszy. W tym samym czasie Java, najpopularniejszy jzyk obiektowy, by ju obecny na rynku od prawie 10 lat. Dlaczego wic w przypadku PHP
pena obiektowo pojawia si tak pno? Mwic zwile, powodem by fakt,
e PHP to jzyk do tworzenia stron internetowych, a potrzeba wprowadzenia
obiektw w tego typu narzdziach pojawia si stosunkowo niedawno.

Por. Zeev Suraski, Object-oriented Evolution of PHP, dostpny na http://www.devx.com/webdev/


Article/10007/0/page/1 (otwierany 3 sierpnia 2006 r.) przyp. aut.

Obsuga obiektw zostaa doczepiona do istniejcego ju jzyka. Dziki temu


mona wybra jedn z dwch opcji programowanie obiektowe lub proceduralne. Ta hybrydowo PHP powinna by postrzegana jako jego zaleta, a nie wada.
Zdarzaj si sytuacje, kiedy trzeba wstawi w kod strony krtki skrypt PHP,
ale take takie, kiedy nieodzowne jest uycie obiektu.
Jak ju dowodziem w rozdziale 1., czsto rozwizanie obiektowe jest jedynym moliwym. PHP 5 jest przygotowane na tak sytuacj i zapewnia w peni
rozwinity model obiektu, umacniajc tym czoow pozycj PHP wrd jzykw skryptowych uywanych po stronie serwera.
Ten rozdzia, podobnie jak poprzedni, powicony bdzie oglnym zagadnieniom. Dokonam w nim przegldu poprawek wprowadzonych w nowej wersji
PHP, a bardziej szczegowo, na przykadach, przedstawi te zagadnienia w kolejnych rozdziaach. Przy tej okazji porusz problem kompatybilnoci ze starszymi wersjami.

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).

Klasy baz danych


Skoro PHP ma uatwia tworzenie dynamicznych stron WWW, to musi obsugiwa zagadnienia zwizane z bazami danych. W PHP pojawia si rozszerzenie
mysqli (MySQL Improved), ktre pozwala wykorzysta waciwoci MySQL 4.1
i pniejszych wersji. Teraz mona ju uywa wczeniej przygotowanych dla
MySQL instrukcji (dziki wbudowanemu interfejsowi OO). W zasadzie wszystko,
co moe by zrobione w procedurach, moe by napisane obiektowo dziki temu
interfejsowi.
SQLite jest silnikiem bazy danych wbudowanym bezporednio w PHP. Nie
jest to baza oglnego uytku, jak MySQL, ale w niektrych przypadkach jest
wrcz idealnym rozwizaniem czsto pozwala tworzy szybsze, bardziej elastyczne i wszechstronne aplikacje. Znw dostpny jest cay interfejs obiektowy.
Wersja 5.1 i wysze rwnie zawieraj obiekty PHP Data Objects (PDO).
Jeli zachodzi potrzeba czenia si z zapleczem wicej ni jednej bazy danych,
wtedy taki pakiet jest idealnym rozwizaniem. Interfejs potraficy wsppracowa z rnymi systemami baz danych jest osigalny jedynie dziki nowemu modelowi obiektu.
Ze wzgldu na swoj wag, bazy danych i zagadnienia z nimi zwizane zostan omwione szczegowo w dalszej czci ksiki. Praca z baz MySQL rozpocznie si w rozdziale 9. Rozdzia 15. bdzie powicony SQLite, a rozdzia 16.
PDO.

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.

Nowe cechy obiektowe w PHP 5

35

Stworzenie klienta SOAP i odczytanie wtku RSS w PHP 4 byo powanym


wyzwaniem dla programisty. Wymagao utworzenia wasnej klasy lub wykorzystania klas zewntrznych, jak NuSOAP (http://sourceforge.net/projects/nusoap/). Podczas pracy z PHP 5 nie ma potrzeby wprowadza zewntrznych rde. Rozdzia 12. pokae, jak atwo sprosta tym zadaniom, uywajc wbudowanej klasy
SOAPClient i SimpleXMLElement. Znw wszystko to jest moliwe dziki ulepszonemu modelowi obiektu.

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.

Wsteczna kompatybilno moe by problemem, jeli kod korzysta ju z obiektw.


PHP 5 wprowadza kilka magicznych metod. Nazwa magicznej metody rozpoczyna si podwjnym podkreleniem, a to pociga za sob zmian nazw innych
metod i funkcji zdefiniowanych przez uytkownika, jeli korzystaj one z tej konwencji. Wszystkie one zostan opisane w rozdziale 13. Najwaniejsze z nich dotycz
zagadnienia tworzenia i niszczenia obiektu. Sposb tworzenia obiektu z PHP 4
jest nadal obsugiwany, ale lepiej jest uywa nowej magicznej metody.
PHP 5 neguje pewne istniejce ju funkcje, zwizane z programowaniem
obiektowym. Przykadem moe by funkcja is_a, ktra zostaa zastpiona nowym
operatorem isinstanceof (zob. rozdzia 14.). Ta zmiana nie ma znaczcego wpywu na wykonanie kodu w PHP 5. Jeli uyta zostanie niezalecana funkcja, PHP
wywietli komunikat (tylko jeeli poziom informowania o bdach ma warto
E_STRICT) uyteczna cecha, poniewa pokazuje, w ktrych miejscach kod
wymaga aktualizacji; szczegy znajduj si w dodatku A. Kolejnym przykadem
s funkcje get_parent_class, get_class i get_class_methods, ktre w nowej wersji
zwracaj wyniki rozrniajce mae i wielkie litery (ale nie wymagaj takiego
rozrnienia przy podawaniu ich parametrw). Oznacza to, e kod wykorzystujcy wyniki ich dziaania w porwnaniu uwzgldniajcym wielko liter, bdzie
wymaga zmian.

36

Rozdzia 3

Przekazany przez referencj


Wczeniejsze przykady pokazuj niewielkie zmiany, ktrych efekty wykrywa si
wzgldnie atwo i rwnie prosto wprowadza si aktualizacje. Jednak wprowadzono te zmian cakiem innego formatu.
Gwna rnica midzy wersj 5. PHP a poprzednimi moe by opisana stwierdzeniem, e obiekty s teraz przekazywane przez referencj. W zasadzie jest to
prawd, ale taki opis maskuje prawdziwy stan rzeczy: zmieniono sposb, w jaki
operator przypisania pracuje z obiektami.
Faktycznie operator przypisania jest czsto wywoywany porednio, podczas
przekazywania obiektu do funkcji lub metody, ale obecnie obiekty s przekazywane przez referencj z powodu niejawnego przypisania. W wersjach wczeniejszych ni PHP 5 domylnym zachowaniem byo przypisanie obiektw przez
wartoci i przekazanie ich do funkcji przez wartoci. Takie rozwizanie jest zupenie odpowiednie dla funkcji pierwotnych, ale w przypadku obiektw staje si
zupenie nieopacalne. Kopiowanie duego obiektu, do czego w rezultacie sprowadza si przekazywanie go przez warto, powoduje przecienie pamici.
W wikszoci przypadkw potrzebne jest wanie odwoanie do oryginalnego
obiektu, a nie jego kopia. Zmiana zadania operatora odwoania jest naprawd
powanym postpem. Co wicej, silnik Zend, ktry jest fundamentem PHP, zosta
przepisany specjalnie na potrzeby PHP 5.
UWAGA

W PHP 4 rwnie istnieje moliwo przekazywania obiektw przez referencj przy


uyciu operatora & i jest to uznawane za dobry zwyczaj programistyczny. Nie
trzeba chyba dodawa, e taki sposb uycia operatora odwoania jest zupenie
zbdny w PHP 5. Konsekwencje wskazanej wanie zmiany omwimy szerzej
w rozdziale 13., w sekcji Metoda __clone.

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.

Nowe cechy obiektowe w PHP 5

37

Czytelnik, ktry kupi t ksik i dotar w lekturze a tutaj, z pewnoci jest


zainteresowany technikami programowania obiektowego. Dla osb znajcych PHP
nauka obiektowej odmiany tego jzyka nie bdzie skomplikowana. Biorc pod
uwag wzgldn prostot modelu obiektowego w PHP, takie zadanie z pewnoci
bdzie wymagao mniejszego wysiku ni przejcie z C do C++. Jednake zmiana
jzyka, czy choby jego wersji, zawsze wymaga powicenia pewnego czasu i nakadu pracy, szczeglnie jeli wie si to ze zmianami w istniejcych bibliotekach.
Omwilimy cz zagadnie zwizanych z kompatybilnoci w odniesieniu
do programowania obiektowego. Prawie kada procedura uruchomi si bez problemu w PHP 5, nie wymagajc przy tym przepisania jej na styl obiektowy.
Inna spraw jest sprawienie, by istniejca aplikacja wykorzystaa moliwoci,
jakie daje obecnie PHP 5. W przypadku duych programw taka aktualizacja
moe wiza si ze znacznym nakadem pracy. Wiele z nich skorzysta na zmianach.
Czytelnik, ktry prbowa ju dostosowywa do wasnych potrzeb oprogramowanie typu phpBB (popularne forum o otwartym dostpie do kodu rdowego), wie,
e takie zadanie byoby znacznie prostsze, jeli aplikacja naleaaby do gatunku
obiektowych. Niestety, aktualizacja niektrych programw, oznacza prac u samych
podstaw.
S te inne zagadnienia, poza kompatybilnoci, ktre naleaoby poruszy.
Czy samo poznanie niuansw programowania obiektowego w PHP 5 wystarczy,
aby go uywa? Czy w sieci dziaaj serwery obsugujce PHP 5?

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

Inne rodowiska hostingowe znacznie szybciej przyswoiy sobie PHP 5. Rne


prywatne serwery wirtualne oraz hosty dedykowane (Virtual Private Server) najczciej dopuszczaj ju PHP 5. VSP, bdc bezpieczniejsz i coraz tasz usug
hostingow, zaczynaj dominowa na rynku.

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.

Nowe cechy obiektowe w PHP 5

39

You might also like