Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
PHP. Programowanie.
Wydanie III
Autorzy: Leon Atkinson, Zeev Suraski
Tumaczenie: Jarosaw Dobrzaski
ISBN: 83-7361-355-2
Tytu oryginau: Core PHP Programming, 3 Edition
Format: B5, stron: 952
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
Sowo wstpne............................................................................................................................................. 9
Przedmowa ..................................................................................................................................................11
Cz I Programowanie w PHP...........................................................................................13
Rozdzia 1. Wprowadzenie do PHP .............................................................................................................15
1.1.
1.2.
1.3.
1.4.
1.5.
1.6.
1.7.
1.8.
1.9.
1.10.
Spojrzenie oglne.............................................................................................. 35
Typy danych ...................................................................................................... 37
Zmienne ........................................................................................................... 40
Stae ................................................................................................................ 45
Operatory.......................................................................................................... 45
Budowanie wyrae ........................................................................................... 57
Instrukcja if....................................................................................................... 61
Operator ? ........................................................................................................ 64
Instrukcja switch ............................................................................................... 64
Ptle ................................................................................................................ 66
Instrukcje exit, die i return ................................................................................. 72
Wyjtki ............................................................................................................. 73
Instrukcja Declare ............................................................................................. 74
Deklarowanie funkcji.......................................................................................... 77
Instrukcja return................................................................................................ 78
Zakres.............................................................................................................. 79
Zmienne statyczne ............................................................................................ 81
Argumenty ........................................................................................................ 82
Rekurencja ....................................................................................................... 85
Dynamiczne wywoania funkcji ............................................................................ 86
PHP. Programowanie
Rozdzia 5. Tablice...................................................................................................................................... 87
5.1.
5.2.
5.3.
5.4.
5.5.
5.6.
5.7.
Tablice jednowymiarowe..................................................................................... 87
Indeksowanie tablic........................................................................................... 88
Inicjalizacja tablic .............................................................................................. 89
Tablice wielowymiarowe ..................................................................................... 90
Rzutowanie tablic .............................................................................................. 91
Operator + ........................................................................................................ 92
Odwoania do tablic z wntrza acucha............................................................... 93
Programowanie obiektowe.................................................................................. 96
Model obiektowy w PHP 5 .................................................................................. 97
Definiowanie klasy............................................................................................. 98
Konstruktory i destruktory ................................................................................ 100
Klonowanie ..................................................................................................... 102
Dostp do metod i waciwoci ........................................................................ 103
Statyczne skadniki klas................................................................................... 106
Typy dostpnoci............................................................................................. 107
Wizanie......................................................................................................... 111
Metody i klasy abstrakcyjne ............................................................................. 114
Przecianie z poziomu uytkownika.................................................................. 117
Automatyczne adowanie klas........................................................................... 118
Serializacja obiektw ....................................................................................... 119
Przestrzenie nazw............................................................................................ 120
Ewolucja moduu Zend ..................................................................................... 122
Spis treci
Pliki................................................................................................................ 173
Pliki skompresowane ....................................................................................... 217
Direct I/O ....................................................................................................... 224
Diagnostyka.................................................................................................... 227
POSIX............................................................................................................. 252
Polecenia interpretera...................................................................................... 257
Sterowanie procesami ..................................................................................... 262
PHP. Programowanie
Rozdzia 17. Bazy danych.........................................................................................................................557
17.1.
17.2.
17.3.
17.4.
17.5.
17.6.
17.7.
17.8.
Cz III Algorytmy...........................................................................................................737
Rozdzia 21. Sortowanie, wyszukiwanie i liczby losowe ......................................................................739
21.1.
21.2.
21.3.
21.4.
21.5.
21.6.
21.7.
21.8.
Spis treci
Cz IV Inynieria oprogramowania..............................................................................815
Rozdzia 26. Integracja z HTML-em .........................................................................................................817
26.1.
26.2.
26.3.
26.4.
Optymalizacja.................................................................................................. 852
Mierzenie wydajnoci ....................................................................................... 853
Optymalizacja najwolniej wykonywanych fragmentw........................................... 857
Kiedy przechowywa tre w bazie .................................................................... 859
Strategie diagnostyczne ................................................................................... 859
Symulowanie pocze HTTP ............................................................................ 860
Buforowanie treci strony................................................................................. 861
Kompresja generowanej treci.......................................................................... 862
Unikanie eval .................................................................................................. 863
Unikanie dynamicznego adowania rozszerze.................................................... 865
Zwikszanie szybkoci realizacji zapyta MySQL ................................................ 866
Optymalizacja sesji zapisujcych dane na dysku ................................................ 867
Unikanie przekazywania argumentw przez odwoania
(czyli dlaczego nie ufa instynktowi) .................................................................. 868
28.14. Unikanie konkatenacji duych acuchw........................................................... 870
28.15. Unikanie umieszczania duych plikw na serwerze Apache z uaktywnionym PHP ... 871
PHP. Programowanie
28.16.
28.17.
28.18.
28.19.
28.20.
28.21.
Dodatki...............................................................................................................................889
Dodatek A Kody z ukonikiem ..................................................................................................................891
Dodatek B Kody ASCII...............................................................................................................................893
Dodatek C Operatory ...............................................................................................................................899
Dodatek D Znaczniki PHP ..........................................................................................................................901
Dodatek E Konfiguracja PHP w czasie kompilacji..................................................................................903
Dodatek F Zasoby internetowe ...............................................................................................................907
Dodatek G Przewodnik po stylach PHP...................................................................................................909
Skorowidz .................................................................................................................................................913
Wyraenia regularne.
Analiza skadni polega na podziale caoci na elementy skadowe, zwykle dotyczy to podziau
zdania na poszczeglne wyrazy. PHP musi zanalizowa napisany przez nas kod w pierwszym kroku procesu przeksztacania go w dokument HTML. Czasami staniemy rwnie
przed problemem pobierania i weryfikacji danych zawartych w acuchach tekstowych. Moe
to by np. prosta lista oddzielona tabulatorami lub skomplikowany acuch, jakiego przegldarka uywa do swojej identyfikacji w obliczu serwera sieciowego. Mona wwczas podzieli acuch na poszczeglne elementy lub zastosowa wyraenie regularne. W rozdziale
tym opisane zostay funkcje analizujce skadni oraz tre acuchw.
756
Cz III n Algorytmy
757
Rysunek 22.1.
Efekt dziaania skryptu
z listingu 22.1
Warto zwrci uwag na rol ptli w powyszym przykadzie. Zamiast inkrementacji
wartoci cakowitej pobiera ona kolejne elementy acucha. Kiedy funkcja trafi na
koniec danych wejciowych, zwrci
. Pierwsz myl moe by sprawdzanie w ptli
wystpienia wartoci
za pomoc operatora
. Naley pamita, e pusty acuch ma
warto logiczn
. Jeeli dwa separatory nastpuj po sobie, , jak mona si
spodziewa, zwrci pusty acuch. Poniewa nie chcemy, aby operacja dzielenia acucha
zostaa przerwana na pierwszym powtrzonym separatorze, konieczne jest sprawdzenie wystpienia rzeczywistej wartoci
za pomoc operatora
.
Funkcja jest uyteczna tylko w najprostszych i najbardziej uporzdkowanych przypadkach. Przykadem moe by odczyt pliku tekstowego, separowanego tabulatorami. Algorytm polega moe wwczas na odczycie wiersza z pliku, podziale wiersza na elementy,
stosujc tabulator w roli separatora i przejciu do odczytu kolejnego wiersza z pliku.
758
Cz III n Algorytmy
larnych jest rozdzia 2. ksiki Ellie Quigley, UNIX Shells by Example. Wyraenia regularne
stosowane w Perlu s opisane w oficjalnej dokumentacji Perla pod adresem http://www.perldoc.
com/perl5.8.0/pod/perlre.html. Nastpnie naley przeczyta w dokumentacji na stronie PHP
o rnicach midzy implementacj tych wyrae w Perlu a w PHP: http://www.php.net/manual/
pcre.pattern.syntax.php.
Opis
0
0I
Kady z wariantw zawiera jeden lub wicej atomw. Po atomach mog wystpowa znaki
modyfikujce moliw liczb kolejnych trafie dla danego atomu. Gwiazdka () oznacza,
e atom moe wystpowa dowoln liczb razy. Symbol dodawania () oznacza, e atom
musi wystpowa przynajmniej raz. Znak zapytania () oznacza, e atom moe wystpowa raz lub ani razu.
Alternatywnie atom moe by zwizany, co oznacza, e nastpuj po nim nawiasy klamrowe
(), ktre zawieraj liczby cakowite. Jeeli nawiasy klamrowe zawieraj pojedyncz liczb,
wwczas atom musi wystpowa dokadnie t liczb razy. Jeeli w nawiasach znajduje si
pojedyncza liczba, po ktrej nastpuje przecinek, atom musi wystpowa tyle lub wicej
razy. Jeeli klamry zawieraj dwie liczby oddzielone przecinkiem, atom musi wystpowa
liczb razy zawart w przedziale midzy tymi liczbami. W tabeli 22.2 przedstawione s
przykady repetycji.
Tabela 22.2. Wzorce z repetycj w wyraeniach regularnych
Prbka
Opis
0*
0A*
Odpowiada 0, 00, 000, znak plus jeden lub wicej znakw 0;
0*
0+J4*
0+K4*
Odpowiada 00, 000, 0000, znak , po ktrym nastpuje jeden lub wicej znakw 0;
0+KH4*
Odpowiada 00, 000, 0000 znak , po ktrym nastpuj dwa, trzy lub cztery znaki 0;
759
Atom jest szeregiem znakw, z ktrych niektre maj specjalne znaczenie, a inne oznaczaj
po prostu znak, ktry ma wystpowa w acuchu. Kropka () zastpuje dowolny pojedynczy
znak. Karetka () zastpuje pocztek acucha. Symbol dolara () zastpuje koniec acucha.
Jeeli w acuchu ma wystpowa jeden ze znakw specjalnych (),
naley je poprzedzi znakiem . Tak naprawd kady znak poprzedzony znakiem bdzie
traktowany dosownie, nawet jeeli nie ma on specjalnego znaczenia. Kady znak nieposiadajcy specjalnego znaczenia zostanie uznany po prostu za znak, ktry ma wystpowa
w acuchu. Mona rwnie grupowa atomy za pomoc nawiasw, aby byy traktowane
jako jeden atom.
Nawiasy kwadratowe () su do okrelania moliwego zakresu wartoci. Moe on mie
form listy dozwolonych znakw lub zakresu okrelonego za pomoc mylnika ( ). Jeeli
lista lub zakres s poprzedzone karetk (), oznacza to wszystkie znaki spoza okrelonego
zakresu. Naley zwrci uwag na to podwjne znaczenie znaku .
Oprcz list i zakresw nawiasy kwadratowe mog zawiera klasy znakw. Nazwy tych klas
s dodatkowo otoczone dwukropkami, aby odpowiada wszystkim znakom nalecym do
alfabetu !"#$%"!. Dostpne klasy to: "#&'(, "#$%", )#"&, *&#, +,-,, -"$%, #./,
$,&, $'&*, $"*/, '$$/ i 0+,-,. Opisy tych klas znajduj si w dokumentacji *1$/.
Oprcz tego, dwa dodatkowe kody w nawiasach kwadratowych okrelaj pocztek lub koniec
wyrazu. S to odpowiednio !2! i !!. Wyraz oznacza w tym przypadku kad sekwencj
znakw alfanumerycznych i znakw podkrelenia. Tabela 22.3 zawiera przykady uycia
nawiasw kwadratowych.
Tabela 22.3. Nawiasy kwadratowe w wyraeniach regularnych
Prbka
Opis
;(
L;
&M()N
Odpowiada N, N, 0N, 0N, 0(N dowolny cig zoony z pierwszych trzech liter alfabetu,
po ktrych nastpuje N;
0&)
&LO)+P4
Odpowiada kademu acuchowi o dugoci 5 znakw, ktry nie zawiera maego lub duego ;
&&33))
&&33));
760
Cz III n Algorytmy
acuch posiada okrelon form. Przykadem moe by kontrola poprawnoci formatu kodu
pocztowego, skadajcego si z dwch cyfr, po ktrych nastpuj mylnik i trzy cyfry. Pokazuje
to listing 22.2. Efekt dziania przykadowego skryptu wida na rysunku 22.2.
Rysunek 22.2.
Efekt dziaania skryptu
z listingu 22.2
761
762
Cz III n Algorytmy
0
<
Z (
8(*.
0
<
X8 ,/T$U!/.
0
<
F
,8(&@).
4
/[
7
0
<
X8 /;
/<
0
<
F
:0
15/;
/T
60<R
6<
R
7
3/*.
/8/0
<
X8 **
+
/
,5//;
/3<<<;8(
;(8 < ;5/1/*.
/U
!N
/*.
/1/*.
4
+
/
,5//;
/3<<<; ( ;(8(8< N;8/;/5/1/*.
/XE
/*.
/1/*.
4
/
6<;0
15/*.
1
Gwna funkcja //- w skrypcie jest uyta bez warunku ,. Zakada ona, e przegldarka
dokona swojej identyfikacji co najmniej w postaci podania nazwy, ukonika i numeru wersji.
Tablicy ("*% zostaj przyporzdkowane czci rozpatrywanego acucha, ktre odpowiadaj
czciom wyraenia regularnego. Wyraenie to skada si z trzech podwyrae, odpowiadajcych nazwie, wersji i wszystkim pozostaym charakterystykom. Forma ta jest stosowana
przez wikszo przegldarek, w tym Navigatora i Internet Explorera. Jako e Internet Explorer
zawsze identyfikuje si jako przegldarka Mozilla (Netscape), naley wykona dodatkowe
kroki, aby okreli, czy przegldarka jest rzeczywicie produktem Netscape, czy go tylko
udaje. Odpowiada za to wywoanie //-,.
Dlaczego element zerowy tablicy jest pomijany? Ot przechowuje on podcig, ktry zosta
trafiony przez cae wyraenie regularne. W omawianej sytuacji trafienia takie nie maj znaczenia. Zwykle element zerowy okazuje si przydatny, gdy poszukujemy okrelonego acucha,
zawartego w ramach szerszego kontekstu. Przykadem moe by przeszukiwanie treci strony
w poszukiwaniu URL-u. Listing 22.4 pobiera stron domow PHP i tworzy list wszystkich
czy znajdujcych si na tej stronie. Efekt dziaania jest widoczny na rysunku 22.3.
Listing 22.4. Poszukiwanie adresw URL na stronie
# ?0
6<
# ?,/3<<<;; /.
<
, # ?/
/*.
/?
# ?0
15/*.
/15/*.
763
764
Cz III n Algorytmy
Gwna ptla skryptu pobiera wiersze tekstu ze strumienia pliku i szuka waciwoci %/.
Jeeli waciwo taka zostanie znaleziona w wierszu, jest on umieszczany w zerowym elemencie tablicy ("*%. Nastpnie skrypt wywietla zawarto tego elementu i usuwa go z wiersza
za pomoc funkcji //->/$#"*/. Funkcja ta zamienia tekst pasujcy do wyraenia regularnego na dany acuch. W tym przypadku waciwo ?4 zostaje zastpiona acuchem
pustym. Powodem usunicia cza po jego odnalezieniu jest moliwo znalezienia dwch
czy w jednym wierszu kodu HTML. Funkcja //- trafi wwczas tylko pierwszy podcig.
Rozwizaniem jest odnalezienie i usunicie wszystkich czy.
Jak wida, w chwili usuwania cza tworzona jest zmienna /$#"*/. Niektre cza mog
zawiera znak zapytania dopuszczalny znak w URL-u, ktry oddziela nazw pliku od
zmiennych formularza. Jako e znak ten ma specjalne znaczenie w wyraeniach regularnych,
skrypt umieszcza przed nim znak , aby umoliwi jego dosown interpretacj.
Czsto uywam funkcji //->/$#"*/ do konwersji treci na potrzeby nowego kontekstu.
Mona na przykad zastosowa //->/$#"*/ do zastpienia kilku spacji jedn. Pokazuje to
listing 22.5. Efekt dziaania skryptu z listingu wida na rysunku 22.4.
765