Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Po prostu PHP.
Techniki zaawansowane
Autor: Larry Ullman
Tumaczenie: Radosaw Meryk
ISBN: 83-7197-775-1
Tytu oryginau: PHP Advanced For The World Wide Web.
Visual QuickPro Guide
Format: B5, stron: 492
Jzyk programowania PHP stanowi dla wielu osb przepustk w wiat pisania aplikacji
dziaajcych po stronie serwera WWW. atwo z jak przychodzi nauczenie si tego
jzyka, sprawia, e uywaj go setki tysicy amatorw i profesjonalistw na caym
wiecie.
Po pewnym czasie wiedza wyniesiona z podrcznikw opisujcych podstawy PHP
jzyka przestaje wystarcza. Niniejsza ksika pomoe Ci w wykonaniu kolejnego
kroku: kroku w kierunku pisania zaawansowanych aplikacji. Dziki niej wzbogacisz
swoj wiedz i staniesz si prawdziwym ekspertem programowania w PHP,
poszukiwanym na rynku pracy.
Pomoe Ci w tym prosty jzyk w jakim napisana jest ksika oraz liczne przykady
kodu, a take osoba autora, dowiadczonego programisty i wykadowcy PHP na
Uniwersytecie Kalifornijskim w Berkeley.
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
Spis treci
WSTP
Rozdzia 2.
Programowanie obiektowe
59
Definiowanie klas ..................................................................................... 61
Tworzenie obiektu .................................................................................... 64
Tworzenie konstruktorw ......................................................................... 70
Dziedziczenie............................................................................................ 76
Uycie metod klas bez ich egzemplarzy ................................................... 82
Szeregowanie obiektw ............................................................................ 84
Usuwanie obiektw................................................................................... 93
Rozdzia 3.
Bazy danych
97
Projekt bazy danych i normalizacja .......................................................... 99
Tworzenie bazy danych .......................................................................... 108
Generowanie wynikw zapyta .............................................................. 113
Rozdzia 4.
Bezpieczestwo
139
Sprawdzanie poprawnoci danych w formularzach................................ 141
Sprawdzanie danych w formularzu za pomoc skryptw JavaScript ..... 155
Mcrypt..................................................................................................... 164
Uwierzytelnianie HTTP .......................................................................... 175
Bezpieczestwo serwera WWW............................................................. 181
Rozdzia 5.
Spis treci
Rozdzia 1.
Spis treci
Spis treci
E-commerce
247
Tworzenie bazy danych .......................................................................... 249
Administracja.......................................................................................... 255
Wywietlanie towarw online................................................................. 271
Implementacja koszyka na zakupy ......................................................... 279
Rozdzia 7.
PHP w sieci
289
Wykrywanie przegldarki ....................................................................... 290
Dostp do innych orodkw WWW za pomoc PHP............................. 298
Wykorzystanie fsockopen() .................................................................... 303
Rozdzia 8.
PHP a serwer
309
Uruchamianie skryptw za pomoc usugi cron ..................................... 310
Kompresja plikw za pomoc PHP ........................................................ 317
Wykorzystanie moduu COM w PHP..................................................... 322
Rozdzia 9.
XML i PHP
331
Czym jest XML?..................................................................................... 332
Skadnia jzyka XML ............................................................................. 334
Definicje typu dokumentw.................................................................... 337
Analiza dokumentw XML za pomoc PHP oraz Expat........................ 344
Obsuga bdw w XML......................................................................... 351
Spis treci
Dodatek B
Bazy danych
475
Aplikacje systemw zarzdzania bazami danych ................................... 476
SQL......................................................................................................... 477
Informacje dotyczce bazy danych MySQL........................................... 480
Inne zasoby ............................................................................................. 482
Dodatek C
Zasoby oglne
483
Orodki WWW powicone PHP ........................................................... 484
Dodatkowe biblioteki.............................................................................. 486
Bezpieczestwo....................................................................................... 488
Inne zasoby ............................................................................................. 489
Skorowidz
493
Spis treci
Dodatek A
Zaawansowane
programowanie w PHP
19
Rozdzia 1.
Struktura
i dokumentowanie kodu
dokumentu.
20
fragmentw kodu;
u wymieniajmy pliki, z ktrymi program si
21
0A,%.#%1 ,"?A,BC
001,=%"<5!?A,%@A,BC
02<#!1,"?A,%BC
0+
06'"1?"!
?A5@AEB.1<?A%BBF
09A'!.C
0/A!.C
2'"1?"!
?A5$@AE$B.1<?AEBBF
2AE$.!D7!
?AE$@@?!
1 ?AE$BBBC
2$">??AE$..A'RA5$SB ,?A5$.BBF
2A'!TTC
20H1!1">?A5$.BF
22A!TTC
2+H
26H
29ARA5S.8?I'!I.-A'!@I!I.-A!BC
2/H
+5!#
?ABC
+>D <
"# '"
1=1!D
!?AE@A5@A>%BF
+$!
"<A>$C
+">?A>$BF
+0>%D
!?A>%@O8
5#' "5G
'!G
!G BC
+2A>$.)C
++H
+6A,."%#,1?G
@AEBC
+9>%D
!?A>%@A5G
A,G BC
+/
6A>$.I$1!D
!=II=
*
IC
6">?A>%$.J>#%1 ?A>$@'BBF
6$8='5?A@I'"
1=1!D
!I@A>%$BC
6><#!1?A>%$BCK5 "L<"1%"5D
601<#IK%"! #'8 "5"7-7-IC
62H1!1F
6+1<#N"1#O D
'#38P%"5D
3
8(#, "#'8"'8 "5"@A>$7-7-C
66H
69:6/7#,89
-
Rozdzia 1.
22
23
9+
965!#
?A1!D
!BC
99
9/
/>D <
"# '"
1=1!D
!?AED1@A518@
A>%BF
/
/$!
"<A>"!
=" 1$C
/
/0">?A>"!
=" 1$BF
/2>%D
!?A>%@O8
5#' "5G
8%8
%#%' 1G
8%874L, 1G BC
/+A>"!
=" 1$.)C
/6H
/9
//A,
."%#,1?G
@AED1BC
>%D
!?A>%@A518G
A,
G BC
$
A>"1$.I$1!D
!=IU
I=
*
IC
0
2">?A>%$.J>#%1 ?A>"1$@'BBF
+
68='5?A1!D
!@
I'"
1=1!D
!I@A>%$BC
9><#!1?A>%$BCK5 "L<"1%"5D
/1<#IK%"! #'8 "5"7-7-IC
H1!1F
$
1<#N"1#O #
'#38P%"5D
3
8(#, "#'8"'8 "5"@
A>"1$7-7-C
0H
2:+7#,86
-
Rozdzia 1.
24
H
H
$
A1!D
!RA518S.8?I'" !I.A'" !@I#!!1!I.-A#!!1!BC
K%"! "1'8 "5M'5O,1(#
3DO8
5#' "5M''
7"<8
0H
2
+5!#
?A1!D
!BC%#3\,5#' "1
7"<8>71
8<3 "1
6
9
/VV
$VK%"! "1
8(#, "#'8<'8 "5M'V
$VV
$$
$>D <
"# '"
1=1!D
!?AED1@A518@
A>%BFK%"!DY1'8 "5",#%"5D
$0
$2!
"<A>"!
=" 1$C
$+
$6">?A>"!
=" 1$BFK%"! "1
%"1'!31(#'"1!3
%8@1
85#
3
$9>%D
!?A>%@]<3G
%#%' 1G
74L, 1G BC#, "13 5D
1
D
5@785O,83%"!
3 34!"L'#!#7 8'"1!3D
$/A>"!
=" 1$.)C
H
$A,
."%#,1?G
@AED1BC
>%D
!?A>%@A518G
A,
G BC
#, "13 5D1
D
5@78
5O,83%"!3 34!"L'#!#7 8
'"1!3D
0H
2
+A>"1$.I$1!D
!=IU
I=
*
IC!53 "1 3'8%"5D
'>#<"1I1!D
!==
*
I
6
9">?A>%$.J>#%1 ?A>"1$@'BBF
'<"1%"5D,#3%"!D
/
08='5?A1!D
!@
I'"
1=1!D
!I@A>%$BC8!4 "1
3'
#Q<"<41Y
7"<8,#>D 5<Y"
'"
1=1!D
!
0><#!1?A>%$BCK5 "L<"1%"5D
0$1<#I8 "5"3%"! #7-7-IC
0
25
Rozdzia 1.
Poruszylimy ju sporo zagadnie, dotyczcych
dobrej struktury kodu oraz waciwego jego
dokumentowania. Zwizy dokument powicony
temu tematowi Standard kodowania w PHP
(PHP Coding Standard) mona znale pod
adresem www.DMCinsights.com/phpadv
/coding_standard.php (rysunki 1.1 oraz 1.2).
Wskazwki
Program PHPDoc jest aplikacj typu
Rozdzia 1.
Tablice
Tablice s specjalnego rodzaju zmiennymi,
ktre mog dziaa jak tabele w arkuszu
kalkulacyjnym. Ze wzgldu na moliwoci,
jakie oferuj, oraz elastyczno, tablice s
powszechnie wykorzystywane w zaawansowanym
programowaniu w PHP. W tym podrozdziale
opiszemy kilka najbardziej powszechnych
funkcji obsugi tablic.
Nowoci w PHP4 jest konstrukcja ,
ktr opracowano w celu umoliwienia
atwiejszego dostpu do wszystkich indeksw
i wartoci tablicy. Zakadajc, e mamy tablic
o nazwie ", moemy uzyska dostp
do kadego jej elementu za pomoc
nastpujcego kodu:
Tablice
>#1<?A8!A518.-AED1BF
5#,
H
28
tekstw.
2. Zapiszemy wiersz nagwka (skrypt 1.4):
]#!%#,31]#Q<"1
29
Tablice
Rozdzia 1.
5. Podobne pliki stworzymy dla pozostaych
Tablice
30
Tablice
!"
"#
$
%&''''#()$)*
$$+*
!"
"# ,
,
* !.
%&''''#(///*
01,2
"
1-#
"3
#%"45!5"
"
1+1,67#,89:%%;51<%"=5!<>#%%
/?'115.@
?>"1.A$'115A?'115A
*
A@!53 "1%"5B %#,!
'"1 B1B
8(#, "
$">C?(1!..D>"1C?>"1EEF=38
"1%"5B,#
7"=8
0
#%31=38
"B%"5BG'8H'"1
1 "1>#B3
21=#A>#=
"# .!
#1<%"=5!%%1
#,.%#!
+
717#,1.'",
.9I=1!%=" (.0=1%,," (.0"( .=1
16
"( .=1
1J"( .
#%9
,=#!% .'",
.I"( .=1
1J"( .
#% #'%. #'%%#',K 3'LBM8
5#' "5&
/" %B
8%1.
1*
1.B!1 1!"31.$*1 (
.$-
,$
$A@
$$
$>#1=C?(1!!?518.-?8EFN!
#!#' "1
7"=8,#'8H'"1
1 "5M,1O(8
$0
$2">C?518.EF"1!3P#H="1P#!%#,31 "1'8H'"1
8
$+
$6?!1=# ,<8.1*%#,1CQ
G?8E@
315!3
4=1 "15M,1(#'"1!3
7"=8
'#,,3"1 R
7"=L
$9?'8.?!1=# ,<8ST@
"1'!38111
#,%#'",31!%#4#'"(#H="
$/?#1.!B7!
C?!1=# ,<8STGGC!
1 C?!1=# ,<8STEEE@
B("111
#,%#'",31!%#4#'"(#!%#,38G1B!"8B!B RU3 51
B
1=#
"( .Q=1
1QJ"( .Q
#%Q$
,"( .Q1>
QJ"( .Q
#%Q #'%.Q #'%Q-" %B
8%1.Q,"#Q
1.Q%"=5!S?518TQJB1.Q?'8Q-?'8
,
,"( .Q=1
1QJ"( .Q
#%Q-%31="'
,0
,"( .Q"(
QJ"( .Q
#%Q #'%.Q #'%Q-" %B
8%1.Q,"#Q 1.Q%"=5!S?518TQJB1.Q?#1Q-?#1
,2
-Q @
+V
6V
9
/3B%14 "1 "1>#B3"
71"
01=#
"( .Q=1
1QJ"( .Q
#%Q0
,=#!% .QQ'",
.QIQ"( .Q=1
1QJ"( .Q
#%Q-" %B
8%1.Q!B7"
Q 1.Q!B7"
QJB1.Q8H"OQ0$
0
7100" %B
8%1.Q",,1 Q 1.Q'115QJB1.Q?'115Q02>#-Q @
0+
06V1!1F8H'"1
1 "15#B "5
B#74L,3"1GO1M1"#
'="1%"5B "1%#'"#,4#!"L
091=#W"1#M #
'#38U%"5B?>"1W1M8B%1' "U!"LG=383"1 '115B!
'"# R
'
#HU7-7-@
0/V
2:27#,82$
-
31
Rozdzia 1.
przyjmie posta:
Tablice
:.AD!1 1:-
Aby w rdle HTML znalaz si znak cudzysowu (co jest konieczne dla zachowania
poprawnoci skadni), naley go poprzedzi znakiem odwrotnego ukonika. Z tego wzgldu
wysyajc kod HTML do przegldarki, stosuj instrukcj echo z apostrofem.
Jednym z problemw podczas wykorzystywania apostrofw jest sposb interpretacji
zmiennych i sekwencji specjalnych, ktre w tym przypadku s traktowane dosownie,
co oznacza, e instrukcje postaci:
A3"1 .I'
#!<IC
1<#IA3"1 G IC
spowoduj wywietlenie cigu $zmienna \n, a nie wartoci zmiennej, po ktrej nastpuje
znak koca wiersza, co nastpi w wyniku zastosowania poniszego kodu:
A3"1 .I'
#!<IC
1<#A3"1 G C
32
Biorc pod uwag sposb wywietlania zmiennych, powinienem take wyjani sposb
interpretowania w PHP tablic wielowymiarowych. Zazwyczaj element tablicy
wielowymiarowej (tablicy zoonej z tablic) moemy zlokalizowa, stosujc konstrukcj:
A 3'=
7"<8RI 3'=
7='1' ISRI" ,15!=
7='1' IS
Tablice
33
Rozdzia 1.
10. Rozpoczniemy wpisywanie treci
wykorzystywany:
A>"1.I$'115IA'115I
*
IC
Tablice
34
-G C
H
H
oraz tabeli.
1<#
"( .G<1
1GE"( .G
#%G
,<#!% .GG'",
.G_G
"( .G<1
1GE"( .G
#%G-" %D
8%1.G!D7"
G 1.G!D7"
G
ED1.G8Q"YG
71" %D
8%1.G",,1 G 1.G'115G
ED1.GA'115G>#-G C
35
Tablice
>#1<?A(1!!A518.-A8BF
">?A518.BF
A!1<# ,=8.1*%#,1?G
@A8BC
A'8.A!1<# ,=8RSC
A#1.!D7!
?A!1<# ,=8RS@@
?!
1 ?A!1<# ,=8RSBBBC
1<#
"( .G<1
1G
E"( .G
#%G
,"( .G1>
GE"( .G
#%G
#'%.G #'%G-" %D
8%1.G,"#G
1.G%"<5!RA518SG
ED1.GA'8G-A'8
,
,"( .G<1
1G
E"( .G
#%G-%31<"'
,
,"( .G"(
GE"( .G
#%G
#'%.G #'%G-" %D
8%1.G,"#G
1.G%"<5!RA518SG
ED1.GA#1G-A#1
,-
Rozdzia 1.
16. Zakoczymy gwn instrukcj warunkow
Tablice
36
Stae
Stae to specjalny rodzaj zmiennych, ktremu
moim skromnym zdaniem nie powica si
dostatecznie duo uwagi. Stae, jak wskazuje nazwa,
zawieraj warto, ktra nie zmienia si, ani te
nie moe si zmienia w czasie dziaania skryptu.
Ponadto dodatkow zalet staych jest fakt,
e w danym zakresie s one globalne, co oznacza,
e s automatycznie dostpne wewntrz funkcji.
W nazwach staych wielko liter ma znaczenie,
podobnie jak w nazwach wszystkich zmiennych
w PHP. Zasad jest zapisywanie nazw staych
tylko wielkimi literami. W czasie nadawania
nazw zmiennym naley stosowa te same zasady,
jak w przypadku zmiennych litera (z wyjtkiem
pocztkowego znaku dolara) lub znak podkrelenia,
po ktrym nastpuj litery, cyfry lub znaki
podkrelenia.
Sta tworzy si za pomoc funkcji
w nastpujcy sposb:
,1>" 1?N^K^=W^a[&@'
#QPBC
Stae
Rozdzia 1.
Stae
uytkownikw.
>D <
"# '"
1=,
?AED1@A518@A>%BF
>%D
!?A>%@AED1G BC
H
Funkcja
bdzie wykorzystywana
w poczeniu z funkcj
zgodnie
z tym, co napisano we wczeniejszej czci
tego rozdziau. Funkcja
otrzymuje element tablicy, jej indeks oraz
wskanik do pliku. Zawarto zapisan
do pliku bdzie stanowi nazwa zespou
wybrana przez uytkownika zakoczona
znakiem RETURN. W celu wygenerowania
znaku RETURN naley wykorzysta
sekwencj =, poniewa alternatywna
sekwencja = powoduje problemy
z odczytem pliku w niektrych systemach
(pierwsza sekwencja generuje znak
RETURN, natomiast druga znak CR).
38
!"
"# N
$
%&''''#()$)*
$$+*
!"
"# ,
,
* !.
%&''''#(///*
01,2
"
1-#
"3
#%"45!5"
"
1+1,67#,89:%%
/1 !58%
#7!4D(DY1, 131!58%
D
51=%"<5!=>#%%
!
'"1 "1 D1D
8(#, "Y5#!
41Y
0ZD 5<Y'"
1=,
3%"!DY1
8%8
'%"5D
2>D <
"# '"
1=,
?AED1@A518@A>%BF
+>%D
!?A>%@AED1G BC#, "1
3 5D1
D @78D"1Q<"P5O,8
111
'#,,3"1 8'"1!3D
6H
9
!"#$#!%!
& "!'! (#$#
$
$">?A>%.J>#%1 ?A>"1@'BBF
'<"1%"5D,#3%"!D
$$
$>%D
!?A>%@"1!3
%G BC
'#31 "1'"1!3
%8
$08='5?A%"<5!@I'"
1=,
I@
A>%BC8!4 "1<41Y
7"<8
,#>D 5<Y"'"
1=,
$2><#!1?A>%BCK5 "L<"1%"5D
$+1<#I'#Y1
8%83#!
483%"! 1IC
$6
$9H1!1F8Q'"1
1 "15#D "5
D
#74L,3"1@Y1O1"#
'<"1%"5D "1
%#'"#,4#!"L
$/1<#N"1#O #
'#38P%"5D
A>"1N1O8D%1' "P!"L@<38
3"1 '115D!
'"# \'
#QP
7-7-C
H
:$7#,8
-
wykorzystywany
A>"1.I$%"<5!=IUI=I
AD!1 1I=
*
IC
39
Stae
Rozdzia 1.
8. Zamykamy plik, a po pomylnym
oraz HTML.
H1!1F
1<#N"1#O #
'#38P%"5DA>"1
N1O8D%1' "P!"L@<383"1 '115
D!
'"# \'
#QP7-7-C
H
:7#,8
-
Stae
40
Wskazwki
Aby sprawdzi, czy zdefiniowano sta
41
Stae
Rozdzia 1.
Funkcje rekurencyjne
i zmienne statyczne
Programujc, z pewnoci bdziemy mieli
okazj zdefiniowania i zastosowania wasnej
funkcji jest to doskonae narzdzie, ktre
pomaga waciwie zorganizowa nasz kod oraz
zaoszczdzi czas. Elementem, z ktrego by
moe jeszcze nie korzystalimy, jest rekurencja
wewntrz funkcji.
42
!"
"#
$
%&''''#()$)*
$$+*
!"
"# ,
,
* !.
%&''''#(///*
01,2
"
1-#
"3
#%"45!5"
"
1+1,67#,89:%%;51=%"<5!=>#%%
/
A>"1.I$'115IA'115I
*
IC!53 "1%"5D %#,!
'"1 D1D
8(#, "
$">?A(1!.>"1?A>"1BBF<38
"1%"5D,#
7"<8
0
#%31<38
"D%"5D@'8Q'"1
1 "1>#D3
)*&+& "!#&
& *
"#*&
&#
,
-+#!..&
#*
/0
!1
2
!1
2
!1
#
,
3
9
/>#1<?A(1!!A518.-A8BFK!
#!#' "1
7"<8,#'8Q'"1
1 "5O,1Y(8
$
$">?A518.BF"1!3]#Q<"1]#!%#,31 "1'8Q'"1
8
$$
$A!1<# ,=8.1*%#,1?G
@A8BC
315!3
4<1 "15O,1(#'"1!3
7"<8'#,,3"1 \
7"<L
$0A'8.A!1<# ,=8RSC
"1'!38111
#,%#'",31!%#4#'"(#Q<"
$2A#1.!D7!
?A!1<# ,=8RS@@?!
1 ?A!1<# ,=8RSBBBC
D("111
#,%#'",31!%#4#'"(#!%#,38@1D!"8D!D \P3 51
D
$+
3*&
+# !14
# 4
5!14
#&4
,
/+#!14
#4
5!14
#&4
& !4
& !4
,+##(4
!&4
!"4
6(74
5!4
!!(4
,!!(+#,
+#!14
# 4
5!14
#&4
, %+#,
8+#!14
1*#4
5!14
#&4
& !4
& !4
,+##(4
!&4
!"4
6(74
5!4
*&"4
,*&"+#,
8+# ,4
43
Skrypt 1.8. Skrypt pick_winners.php to tylko nieznaczna modyfikacja jego poprzednika skryptu
make_picks_form.php
Rozdzia 1.
3. Modyfikujemy wiersze 31. 35. oryginalnego
1<#
"( .G<1
1GE"( .G
#%G
,"( .G1>
GE"( .G
#%G #'%.G
#'%G-" %D
8%1.G,"#G 1.G
'" 1!RA518SGED1.GA'8G-A'8
,
,"( .G<1
1GE"( .G
#%G
-%31<"'
,
,"( .G"(
GE"( .G
#%G #'%.
G #'%G-" %D
8%1.G,"#G 1.
G'" 1!RA518SGED1.GA#1G
-A#1
,
-G C
44
45
!"
"#
$
%&''''#()$)*
$$+*
!"
"# ,
,
* !.
%&''''#(///*
01,2
"
1-#
"3
#%"45!5"
"
1+1,67#,89:%%
/
!
'"1 "1 D1D
8(#, "Y5#!
41Y
,1>" 1?U@A'115BC
$
VV
0VK%"!3'8<"L3<M''%"5DV
2VV
+
6>D <
"# '"
1=,
?AED1@A518@A>%BFZD 5<Y'"
1=,
3%"!DY1
8%8'%"5D
9
#!# #
$
$">?A>"!
=" 1BFK%"! "1%"1'!31(#'"1!3
%8@1
85#3
$$>%D
!?A>%@"1!3
%G BC
$A>"!
=" 1.)C
$0H
$2
$+>%D
!?A>%@AED1G BC#, "13 5D1
D @785O,83%"!3 34!"L
'#!#7 8'"1!3D
$6H
$9
$/A>"1.I$%"<5!=IUI=" 1!=
*
IC!53 "1 3'8%"5D'>#<"1
I%"<5!==" 1!=
*
I
">?A>%.J>#%1 ?A>"1@'BBF
'<"1%"5D,#3%"!D
$
8='5?A'" 1!@I'"
1=,
I@A>%BC8!4 "1<41Y
7"<8,#>D 5<Y"
'"
1=,
0><#!1?A>%BCK5 "L<"1%"5D
2
+1<#IK%"! #3'8<"L3<M'7-7-IC
6
9H1!1F8Q'"1
1 "174L,D@'%38%,5D@(,878#
'<"1%"5D784# "1#O"'1
/1<#N"1#O #
'#38P%"5DA>"1
#!3LD%1' "P!"L@O13"1 '115'
#QP
7-7-C
0H
0
0$
0VV
00V
#7 "1
8%M'(<38V
02VV
Rozdzia 1.
1
0+
06>D <
"# 1,=%"<5!?A,%@A,"1<
#8BF38 #QP
L'85# DY1>D 5<Y1,=%"<5!
09
0/(#7A%"<5!C
2
2">?A>"1= 1.1,,"?A,%BBFW%',31 "15O,1(#%"5D'5
#(D
2$
2">?!D7!
?A>"1= 1@@+B..%"<5!=BFU#
8 D<Y@'%38%,5D#, 13"1 "
%"5D3
8%"
20
22A%!1=>"1= 1.1*%#,1?=@A>"1= 1BC
315!3
4<1 "1 3'8%"5D
#,%#'"1, ">#
2+
26">??A%!1=>"1= 1RS..UB ,?A%!1=>"1= 1R$S." 1!BBF
[1O1"
# "1Y1!
%"53, 8"#3'8<"L3<<@ D1
8(#, "Y1!
'4Q<"'8
29
2/AD!1 1.A%!1=>"1= 1R$SC
+A
1=>"1.A,"1<
#8A>"1= 1C
+AD!1!=%"<5!.>"1?A
1=>"1BC
+$A%"<5!RAD!1 1S.AD!1!=%"<5!C
+H
+0H
+2
-- ! #& (
&9!# !9!9
+6H
+9H
+/
6A%"<5!.8?BCK" "<Y#' "1(4M' 1Y3"1 1Y
6
6$A,"1<
#8.I$IC
6A,%.#%1 ,"?A,"1<
#8BC
601,=%"<5!?A,%@A,"1<
#8BC
62<#!1,"?A,%BC
6+
66
69VV
6/V7"<31 "1
8(#, "#'8<'8 "5M'V
9VV
9
9$'"1?"!
?A518@AED1B.1<?A%"<5!BBF
L
,'8 "5M''(4M' 1Y
7"<8
9
90A'" !.C!
'"1 "1 '
#QP,5O,1Y
7"<8
92A#!!1!.C!
'"1 "1 '
#QP,5O,1Y
7"<8
9+
96'"1?"!
?A518$@AED1$B.1<?AED1BBF
L
,5O,1Y
7"<8DO8
5#' "5
99
9/AED1$.!D7!
?AED1$@@?!
1 ?AED1$BBBC!D "L<"13 5D1
D
/
/">??AED1$..A'" 1!RA518$SB ,?A518$.BBF[1O1"
8%DO8
5#' "5Y1!
'4Q<"'8@%383 Y18D%D 5
@1 "1"<388'"1!3
1
Jeeli uruchamiamy skrypt w systemie Windows, wwczas naley zapisa ten wiersz jakoAED1$.
!D7!
?AED1$@@?!
1 ?AED1$BBB@poniewa znak RETURN skada si w systemie Windows
z dwch znakw (CR+LF) przyp. tum.
46
/$A'" !TTC
/H1!1">?A518$.BF
/0A#!!1!TTC
/2H
/+H
/6
/9A1!D
!RA518S.8?I'" !I.-A'" !@I#!!1!I.-A#!!1!BCK%"! "1'8 "5M'
5O,1(#3DO8
5#' "5M''
7"<8
//H
5!#
?A1!D
!BC%#3\,5#' "1
7"<8>71
8<3 "1
$
0VV
2VK%"! "1
8(#, "#'8<'8 "5M'V
+VV
6
9>D <
"# '"
1=1!D
!?AED1@A518@A>%BFK%"!DY1'8 "5",#%"5D
/
#!# #
$">?A>"!
=" 1$BFK%"! "1%"1'!31(#'"1!3
%8@1
85#3
>%D
!?A>%@]<3G
%#%' 1G
74L, 1G BC#, "13 5D1
D
5@785O,8
3%"!3 34!"L'#!#7 8'"1!3D
0A>"!
=" 1$.)C
2H
+
6A,
."%#,1?G
@AED1BC
9>%D
!?A>%@A518G
A,
G BC#, "13 5D1
D
5@785O,83%"!
3 34!"L'#!#7 8'"1!3D
/H
$
$A>"1$.I$1!D
!=IUI=
*
IC!53 "1 3'8%"5D'
>#<"1I1!D
!==
*
I
$$
$">?A>%$.J>#%1 ?A>"1$@'BBF
'<"1%"5D,#3%"!D
$0
$28='5?A1!D
!@I'"
1=1!D
!I@A>%$BC8!4 "13'
#Q<"<41Y
7"<8
,#>D 5<Y"'"
1=1!D
!
$+><#!1?A>%$BCK5 "L<"1%"5D
$61<#I8 "5"3%"! #7-7-IC
$9
$/H1!1F8Q'"1
1 "15#D "5
D#74L,3"1@Y1O1"#
'<"1%"5D "1%#'"#,4#!"L
1<#N"1#O #
'#38P%"5D3
8(#, "#'8"'8 "5"@A>"1$7-7-C
$H
:07#,82
-
47
Rozdzia 1.
6. Rozpoczniemy wpisywanie treci dokumentu
zwycizcw.
>D <
"# '"
1=,
?AED1@A518@A>%BF
!
"<A>"!
=" 1C
">?A>"!
=" 1BF
>%D
!?A>%@"1!3
%G BC
A>"!
=" 1.)C
H
>%D
!?A>%@AED1G BC
H
Funkcja
zasadniczo zapisuje
wiersz tekstu do pliku. Poniewa chcemy,
aby pierwszy wiersz pliku by wierszem
atrap, to stworzylimy instrukcj
warunkow, ktra zapisze ten wiersz,
ale tylko wtedy, gdy pierwszy wiersz
nie zosta jeszcze zapisany (nie chcielibymy,
aby wiersz atrapa by zapisywany
za kadym razem, kiedy wywoujemy t
funkcj). Poniewa zmienna "#
ustawiona na warto *9 po zapisaniu
pierwszego wiersza jest zadeklarowana jako
statyczna za pomoc instrukcji #,
zatem jej warto bdzie pamitana w kadej
iteracji funkcji. Z tego powodu, kiedy funkcja
zostanie wywoana po raz drugi, zmienna
"# bdzie pamitana jako *9
i instrukcja warunkowa nie wykona si.
9. Wybieramy plik do przetwarzania.
A>"1.I$%"<5!=IU
I=" 1!=
*
IC
48
49
Rozdzia 1.
16. Wskazujemy plik wynikw i tworzymy
50
%#%' 1 74L, 1
9 6
0
2
0
51
Rozdzia 1.
Funkcje a odwoania
Domylnie funkcje otrzymuj argumenty
wedug zasady wywoanie przez warto.
Oznacza to, e funkcja otrzymuje warto
zmiennej, a nie sam zmienn. Aby uaktualni
warto zmiennej wewntrz funkcji, naley
zastosowa instrukcj $ albo przekaza
zmienn przez odwoanie.
Oto przykad zwyczajnego dziaania funkcji:
Funkcje a odwoania
52
Aliasy
Nowoci w PHP4 jest moliwo przekazywania parametrw przez adres niezalenie
od funkcji. Skadnia instrukcji sucych do wykonywania tego typu czynnoci jest nastpujca:
AE"71."<(#D7!C
AE"71$.AE"71C3"1 AE"71$Y1!
5#%"\3"1 1YAE"71
AE"71.bAE"71C3"1 AE"71Y1!
#,'#4 "1,#3"1 1YAE"71
AE"71$.N
"# 1(D11,1!C'
#QP3"1 1YAE"71$
#N
"# 1(D1
1,1!'
#QP3"1 1YAE"71
#',!38<"\(D"<(#D7!
AE"71.@N
"# 1(D11,1!C#7"13"1 1AE"71#3AE"71Y\
'
#QP"<(#D7!@N
"# 1(D11,1!
Funkcje a odwoania
53
Rozdzia 1.
Funkcje a odwoania
54
55
Funkcje a odwoania
!"
"#
$
%&''''#()$)*
$$+*
!"
"# ,
,
* !.
%&''''#(///*
0
"
1-#
"3
#%"45!5"
"
121,+7#,86:%%
9
/VV
V7"<31 "1'8 "5M'!13# DV
VV
$
>D <
"# ,#=
1=
?AED1@A518@A
#
BFZD 5<Y!DDY1
> 1"74L, 1
8%8
DO8
5#' "5M'
0
2">?A518.BF( #DY18%"1'!38'"1!3
%L
+
6A" 1.1*%#,1?G
@AED1BC8,3"18 3'LDO8
5#' "5#3
> 1
"74L, 1
8%8
9AD!1 1.A" 1RSC
/A
#
RAD!1 1SR'" !ST.A" 1RSC
$A
#
RAD!1 1SR#!!1!ST.A" 1R$SC
$H
$$H
$
2#& ! # #& (:#&#!;
$2
$+">?A>"1= 1.1,,"?A,%BBF
31!3D5"' "15
#(D
$6">?!D7!
?A>"1= 1@@9B..1!D
!=BF[1O1"Y1!
#%"53'8 "5"
$9A
1=>"1.A,"1<
#8A>"1= 1C
! !(! #*&#*"!#*:#&#!(&!&.%<
!!(*
H
1,=1!D
!?A,%@A,"1<
#8@A
#
BC
#'
3 "1#%1<Y",5#1Y 8<%"5M'
'5
#(D
$H
H
0
2A
#
.8?BCK" "<Y#' "1(4M' 1Y3"1 1Y
+
6A,"1<
#8.I$IC
9A,%.#%1 ,"?A,"1<
#8BC
/1,=1!D
!?A,%@A,"1<
#8@A
#
BCD<#"1 "1%#<1!D
0<#!1,"?A,%BC
01<#%1-G C
0$%"
=?A
#
BCW3875"1'8Q'"1
1 "1'8 "5M'
01<#%1-G C
00:027#,80+
-
Rozdzia 1.
5. Tworzymy gwn zmienn, otwieramy
WWW.
Funkcje a odwoania
1<#%1-G C
%"
=?A
#
BC
1<#%1-G C
56
Funkcje a odwoania
57