Książka opisuje doskonałą platformę programistyczną dla MS Windows. Opisuje ona PHP na tyle szczegółowo, że osoby zainteresowane mogą potraktować ją jako podręcznik tego języka. Jej szczególną zaletą jest wyczerpujące omówienie integracji PHP z technologiami Windows. Dzięki książce dowiesz się, jak tworzyć i wykorzystywać obiekty COM w PHP, jak łączyć PHP z platformą .NET, jak korzystać z ActiveDirectory oraz jak używać MSXML.
"PHP. Programowanie w systemie Windows. Vademecum profesjonalisty" zawiera również opis:
* Instalacji PHP w systemie Windows
* Konfigurowania i optymalizacji serwerów WWW
* Języka PHP i jego funkcji
* Łączenia PHP z bazami danych (Microsoft SQL Server, Oracle i MySQL)
* Użycia XML i XSLT w PHP
* Integracji PHP z ASP przy użyciu WDDX
* Tworzenia usług WWW w PHP
Jeśli planujesz używać PHP w systemach Windows, książka ta stanie się dla Ciebie nieocenioną pomocą. Gwarancję dobrej jakości stanowi również nazwisko autora. Andrew Stopford jest programistą z wieloletnim doświadczeniem, członkiem wielu zespołów pracujących nad projektami typu "open-source", między innymi XML-RPC for ASP i NMatrix.
PHP. Programowanie w systemie Windows. Vademecum profesjonalisty
1. IDZ DO
PRZYK£ADOWY ROZDZIA£
SPIS TRE CI PHP. Programowanie
w systemie Windows
KATALOG KSI¥¯EK
Autor: Andrew Stopford
KATALOG ONLINE T³umaczenie: Aleksandra Kula
ISBN: 83-7197-915-0
ZAMÓW DRUKOWANY KATALOG Tytu³ orygina³u: PHP Programming for Windows
Format: B5, stron: 290
TWÓJ KOSZYK
DODAJ DO KOSZYKA Ksi¹¿ka opisuje doskona³¹ platformê programistyczn¹ dla MS Windows. Opisuje ona
PHP na tyle szczegó³owo, ¿e osoby zainteresowane mog¹ potraktowaæ j¹ jako
podrêcznik tego jêzyka. Jej szczególn¹ zalet¹ jest wyczerpuj¹ce omówienie integracji
CENNIK I INFORMACJE PHP z technologiami Windows. Dziêki ksi¹¿ce dowiesz siê, jak tworzyæ i wykorzystywaæ
obiekty COM w PHP, jak ³¹czyæ PHP z platform¹ .NET, jak korzystaæ z ActiveDirectory
ZAMÓW INFORMACJE oraz jak u¿ywaæ MSXML.
O NOWO CIACH „PHP. Programowanie w systemie Windows” zawiera równie¿ opis:
• Instalacji PHP w systemie Windows
ZAMÓW CENNIK • Konfigurowania i optymalizacji serwerów WWW
• Jêzyka PHP i jego funkcji
• £¹czenia PHP z bazami danych (Microsoft SQL Server, Oracle i MySQL)
CZYTELNIA • U¿ycia XML i XSLT w PHP
• Integracji PHP z ASP przy u¿yciu WDDX
FRAGMENTY KSI¥¯EK ONLINE • Tworzenia us³ug WWW w PHP
Je li planujesz u¿ywaæ PHP w systemach Windows, ksi¹¿ka ta stanie siê dla Ciebie
nieocenion¹ pomoc¹. Gwarancjê dobrej jako ci stanowi równie¿ nazwisko autora.
Andrew Stopford jest programist¹ z wieloletnim do wiadczeniem, cz³onkiem wielu
zespo³ów pracuj¹cych nad projektami typu „open-source”, miêdzy innymi XML-RPC for
ASP i NMatrix.
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
2. 5RKU VTG EK
1 #WVQTG
9UVúR
9RTQYCFGPKG
%ú è + 4QRQE[PCO[ RT[IQFú 2*2
4QFKC 9RTQYCFGPKG FQ 2*2
Co to jest PHP? ......................................................................................................................18
Jak powstał PHP?...................................................................................................................18
Czym jest Open Source?........................................................................................................20
Projektowanie w PHP a projektowanie wykorzystujące technologie ASP i ColdFusion?....20
Kto odpowiada za dalszy rozwój PHP? .................................................................................21
PHP dzisiaj.............................................................................................................................22
Przyszłość PHP ......................................................................................................................22
Podsumowanie .......................................................................................................................23
4QFKC +PUVCNCELC K QRV[OCNKCELC
Planowanie instalacji PHP .....................................................................................................25
Pobieranie PHP z witryny......................................................................................................26
Instalowanie PHP...................................................................................................................28
Optymalizowanie instalacji....................................................................................................44
Rozwiązywanie problemów z instalacją................................................................................51
Podsumowanie .......................................................................................................................51
%ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2
4QFKC 2TQITCOQYCPKG Y 2*2
Narzędzia do tworzenia aplikacji w PHP ..............................................................................55
Podstawy składni PHP ...........................................................................................................56
Zmienne .................................................................................................................................57
Operatory logiczne i pętle......................................................................................................68
Tablice ...................................................................................................................................74
Kod strukturalny i kod wielokrotnego u ytku .......................................................................80
Podsumowanie .......................................................................................................................86
4QFKC 2*2 K RNKMK
Funkcje PHP obsługi plików i katalogów..............................................................................87
PHP i pliki..............................................................................................................................87
PHP i katalogi ........................................................................................................................97
Podsumowanie .....................................................................................................................104
4QFKC 2*2 K UGULG
Sesje PHP.............................................................................................................................105
PHP a sesje WDDX .............................................................................................................110
Podsumowanie .....................................................................................................................120
3. 2*2 2TQITCOQYCPKG Y U[UVGOKG 9KPFQYU
4QFKC 2*2 K DC[ FCP[EJ
Metody PHP tworzenia zapytań do bazy danych ................................................................121
Współpraca z bazą danych...................................................................................................123
Przekazywanie zapytania do bazy z wykorzystaniem ODBC i PHP...................................123
Przesyłanie zapytania bezpośrednio do bazy z wykorzystaniem PHP ................................128
Podsumowanie .....................................................................................................................151
%ú è +++ CCYCPUQYCPG RTQITCOQYCPKG Y 2*2
4QFKC 2*2 %1/ K 0'6
Wszystko na temat technologii COM..................................................................................155
PHP i .NET ..........................................................................................................................163
Podsumowanie .....................................................................................................................169
4QFKC 2*2 K :/.
Krótka historia XML-a ........................................................................................................171
Czym jest XML?..................................................................................................................172
Wyświetlanie dokumentów w języku XML ........................................................................173
Z czego składa się język XML?...........................................................................................173
Struktura języka XML .........................................................................................................177
Korzystanie z PHP i XML ...................................................................................................178
Formatowanie dokumentów XML za pomocą PHP i XSL .................................................186
Podsumowanie .....................................................................................................................190
4QFKC 2*2 K WU WIK 999
Z czego składają się usługi WWW? ....................................................................................191
Przyszłość usług WWW ......................................................................................................199
Korzystanie z PHP do tworzenia usług WWW ...................................................................199
Podsumowanie .....................................................................................................................208
4QFKC 2*2 K #1
Historia ADO.......................................................................................................................209
Czym jest ADO dla programisty PHP? ...............................................................................211
Instalowanie ADO ...............................................................................................................211
Współpraca pomiędzy PHP i ADO .....................................................................................211
ADODB i PHP.....................................................................................................................232
Podsumowanie .....................................................................................................................234
4QFKC 2*2 K #EVKXG KTGEVQT[
Co to jest katalog X.500?.....................................................................................................235
Czym jest LDAP? ................................................................................................................236
Czym jest Active Directory?................................................................................................236
Korzystanie z Active Directory ...........................................................................................238
Korzystanie z PHP w połączeniu z Active Directory ..........................................................238
Podsumowanie .....................................................................................................................262
QFCVMK
QFCVGM # 6YQTGPKG RQ æEGPKC 1$%
QFCVGM $ +PUVCNQYCPKG UGTYGTC 999
5MQTQYKF
4. Rozdział 3.
2TQITCOQYCPKG Y 2*2
Teraz, kiedy ju zainstalowałeś PHP, mo esz zacząć projektować aplikacje z jego wykorzy-
staniem. W tym rozdziale dowiesz się, od czego zacząć, projektując aplikacje dla WWW,
oraz zapoznasz się z ró nymi typami danych i strukturami składającymi się na język.
0CTúFKC FQ VYQTGPKC CRNKMCELK Y 2*2
Zanim zaczniesz programować w PHP, potrzebny Ci będzie program do pisania, edy-
towania i zapisywania skryptów. Mo esz korzystać z aplikacji Notatnik, jednak dostępne
są równie inne programy oferujące takie funkcje jak podświetlanie składni kodu oraz
testowanie i uruchamianie. Omówimy to w kolejnych punktach.
2*2 'FKV
Edytor typu open-source, PHP Edit, oferuje podświetlanie kodu w ró nych kolorach, testo-
wanie go oraz dostęp do dokumentacji funkcji oraz obiektów i inne.
Więcej informacji, jak równie samo narzędzie, znajdziesz na stronie http://www.
phpedit.com/.
/CETQOGFKC *QOG5KVG
Macromedia HomeSite to edytor HTML obsługujący technologię ASP, ColdFusion i PHP.
Obsługa kolorowego podświetlania poszczególnych elementów kodu jest wbudowaną
funkcją HomeSite, ale dostęp do innych funkcji, takich jak dokumentacja składni, jest
mo liwy jedynie przy wykorzystaniu narzędzi innych firm.
Więcej informacji i testową wersję mo esz pobrać z witryny http://www.macromedia.com/
software/homesite/.
Dodatki do programu Macromedia HomeSite przeznaczone do programowania w PHP
mo na pobrać ze strony http://www.wilk4.com/asp4hs/php4hs.htm.
5. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2
#EVKXG5VCVG -QOQFQ
Narzędzie dostępne jest zarówno dla platformy Windows, jak i Linux. ActiveState Ko-
modo to popularny edytor. Obsługa PHP jest wbudowaną funkcją narzędzia umo liwia-
jącą podświetlanie w ró nych kolorach składni oraz zdalne testowanie i uruchamianie kodu.
Więcej informacji i testową wersję ActiveState Komodo mo na pobrać z http://www.
activestate.com/Products/Komodo/.
GPF +'
Zend IDE to narzędzie zbudowane w oparciu o język Java, które zawiera obsługę pod-
świetlania w ró nych kolorach składni, jak równie rozbudowane funkcje zdalnego testo-
wania i uruchamiania. Więcej informacji i testową wersję narzędzia znajdziesz na stronie
http://www.zend.com/store/products/zend-ide.php.
2QFUVCY[ UM CFPK 2*2
Podobnie jak ASP, PHP wykorzystuje coś, co osobiście nazywam „otwierająco-zamy-
kającym nawiasem” (z ang. open-close bracket). W klasycznym ASP program rozpoczyna
się od znacznika początku programu ( ), a kończy się znacznikiem końca programu ( ):
4GURQPUGYTKVG
-NCU[EP[ RTQITCO Y #52
Podobna sytuacja ma miejsce w przypadku PHP. Program rozpoczyna się od znacznika
!RJR, a kończy ! :
!RJR
RTKPV
2TQITCO Y 2*2
!
PHP dopuszcza równie składnię dobrze znaną programistom tworzącym aplikacje urucha-
miane po stronie klienta. Składnia ta rozpoczyna się poleceniem 5%4+26 .#0)7#)' RJR ,
a kończy poleceniem 5%4+26 :
5%4+26 .#0)7#)' RJR
RTKPV
VGUV
5%4+26
Jeśli masz doświadczenie w projektowaniu w ASP, nie musisz się obawiać. PHP pozwala
wykorzystywać składnię ASP:
RTKPV
2TQITCO Y 2*2
Aby jednak taka składnia była poprawna, musisz zmienić wpis w pliku php.ini:
CURAVCIU 1P
Ta zmienna ma domyślnie przypisaną wartość 1HH.
6. 4QFKC 2TQITCOQYCPKG Y 2*2
2TQITCO[ YKGNQNKPKQYG
Wieloliniowe programy tworzone w PHP wymagają u ycia dodatkowego znaku:
!RJR
RTKPV
6Q LGUV VYÎL RKGTYU[
RTKPV
RTQITCO Y 2*2
!
Zauwa , e PHP wymaga u ycia operatora zamykającego linię ― znaku średnika ().
Jeśli uruchomisz program, w którym nie ma znacznika końca linii, jak w poni ej przedsta-
wionym przykładzie, pojawi się informacja o błędzie 2CTUG GTTQT
D æF RTGVYCTCPKC:
!RJR
RTKPV
6Q LGUV VYÎL RKGTYU[
RTKPV
RTQITCO Y 2*2
!
Jeśli nigdy nie u ywałeś znaków końca linii, mo esz czasami o nich zapominać. Jeśli
pojawi się wiadomość 2CTUG GTTQT podczas tworzenia aplikacji dla WWW, sprawdź, czy
nie brakuje znaku końca linii w wierszu o numerze podanym przez komunikat o błędzie,
jak pokazano na rysunku 3.1.
4[UWPGM
Wiadomość
o błędzie Parse error
OKGPPG
PHP jest określany jako język luźnych deklaracji. Oznacza to, e nie musisz deklarować
typu zmiennych przed ich u yciem. PHP przypisuje w Twoim imieniu typy zmiennych.
Aby to zrozumieć, przyjrzyj się następującemu przykładowi:
!RJR
PCUG V[R[ FCP[EJ
KPVFCVC
FQWDNGFCVC
UVTKPIFCVC #PFTGL
DQQNFCVC 647'
RQFCL V[R[ FCP[EJ
+PV6[RG IGVV[RG
KPVFCVC
RTKPV
OKGPPC KPVFCVC LGUV V[RW +PV6[RG$4
QWDNG6[RG IGVV[RG
FQWDNGFCVC
RTKPV
OKGPPC FQWDNGFCVC LGUV V[RW QWDNG6[RG$4
7. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2
5VTKPI6[RG IGVV[RG
UVTKPIFCVC
RTKPV
OKGPPC UVTKPIFCVC LGUV V[RW FCP[EJ 5VTKPI6[RG$4
$QQN6[RG IGVV[RG
DQQNFCVC
RTKPV
OKGPPC DQQNFCVC LGUV V[RW FCP[EJ $QQN6[RG$4
!
Jeśli zapiszesz dane jako zmienną, PHP przypisuje typ zmiennej zgodnie z typem zapi-
sanych w niej danych. Najpierw podaj, jakie dane będą przechowywane w zmiennej:
KPVFCVCXCT
FQWDNGFCVCXCT
UVTKPIXCT #PFTGL
DQQNXCT 647'
PHP nadaje zmiennej typ odpowiadający danym zapisanym w zmiennej. Na przykład, po-
niewa do zmiennej UVTKPIXCT przypisana jest wartość „Andrzej”, PHP nada tej zmiennej
typ UVTKPI. Mo esz to sprawdzić, wyświetlając typ zmiennej za pomocą funkcji )GV6[RG:
+PV6[RG )GV6[RG
KPVFCVCXCT
Teraz mo esz wyświetlić wartość zmiennej i jej typ:
RTKPV
OKGPPC KPVFCVCXCT LGUV V[RW +PV6[RG$4
Jeśli uruchomisz ten skrypt, zobaczysz takie wyniki, jakie pokazano na rysunku 3.2.
4[UWPGM
Typy danych w PHP
Zwróć uwagę, e zmienna typu DQQNGCP jest wyświetlana jako . PHP wyświetla zmienne
typu DQQNGCP jako , jeśli zmienna ma wartość 647', i jako PWNN (wartość pusta), jeśli zmien-
na ma wartość (#.5'. Przyjrzymy się temu dokładniej w dalszej części tego rozdziału.
2T[RKU[YCPKG V[RÎY OKGPP[EJ
Chocia luźne deklaracje mogą być przydatne w niektórych sytuacjach, czasem musisz
podać typ danych wprost, na przykład przy przetwarzaniu danych pobranych z bazy da-
nych. W tym celu musisz skorzystać z metody 5GV6[RG:
!RJR
PCUG V[R[ FCP[EJ
KPVFCVC
9. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2
5VTKPI6[RG IGVV[RG
UVTKPI
RTKPV
OKGPPC UVTKPI LGUV V[RW 5VTKPI6[RG$4
$QQN6[RG IGVV[RG
DQQN
RTKPV
OKGPPC DQQN LGUV V[RW $QQN6[RG$4
Następnie mo liwa jest zmiana typu ka dej ze zmiennych za pomocą funkcji 5GV6[RG:
5GV6[RG
FQWDNGFCVC KPVGIGT
5GV6[RG
KPVFCVC FQWDNG
5GV6[RG
DQQN UVTKPI
5GV6[RG
UVTKPI DQQNGCP
Jako argumenty funkcji 5GV6[RG podaj nazwę zmiennej, której typ chcesz zmienić (jak
na przykład FQWDNGFCVC), a następnie typ danych, na który typ zmiennej ma zostać zmie-
niony (na przykład KPVGIGT). Na końcu mo esz wyświetlić wartości i nowe typy zmiennych:
+PV6[RG IGVV[RG
KPVFCVC
RTKPV
OKGPPC KPVFCVC LGUV V[RW +PV6[RG$4
QWDNG6[RG IGVV[RG
FQWDNGFCVC
RTKPV
OKGPPC FQWDNGFCVC LGUV V[RW QWDNG6[RG$4
5VTKPI6[RG IGVV[RG
UVTKPI
RTKPV
OKGPPC UVTKPI LGUV V[RW 5VTKPI6[RG$4
$QQN6[RG IGVV[RG
DQQN
RTKPV
OKGPPC DQQN LGUV V[RW $QQN6[RG$4
Jeśli uruchomisz ten skrypt, zobaczysz, e typy zmiennych zostały zmienione zgodnie
z wydanymi poleceniami, jak pokazano na rysunku 3.3.
4[UWPGM
Wykorzystanie funkcji
SetType do zmiany
typu zmiennej
O ile zamiana zmiennych typu KPVGIGT i FQWDNG nie stanowiła większego problemu, to
zamiana zmiennych typu DQQNGCP i UVTKPI była większym wyzwaniem. Wyświetlone wyniki
pokazują, e zmienna typu UVTKPI ma wartość . Jest to zgodne z zasadami wyświetlania
przez PHP zmiennych typu DQQNGCP, poniewa PHP wyświetla wartość 647' jako , dlatego
po konwersji zmienna typu UVTKPI ma wartość .
10. 4QFKC 2TQITCOQYCPKG Y 2*2
Jak widać, równie zmienna DQQNGCP ma wartość . Zmienna typu UVTKPI miała wartość
(CNUG, lecz po konwersji na typ DQQNGCP zmienna nie była pusta i dlatego została uznana
za zmienną o wartości 647' czyli . Aby po konwersji zmienna typu $QQNGCP miała war-
tość (#.5', czyli , zmienna typu UVTKPI musiałaby przed konwersją mieć wartość
bądź być pusta:
UVTKPI
Jeśli dokonamy takiej zmiany w naszym przykładzie, to widać (patrz rysunek 3.4), e
wartość zmiennej typu DQQNGCP jest widoczna jako pusta zmienna. Pamiętaj, e PHP traktuje
wartość jako wartość (#.5' dla zmiennej typu DQQNGCP. Dlatego po konwersji zmiennej
typu UVTKPI o wartości do typu DQQNGCP zawartość zmiennej jest traktowana jako (#.5'.
Nale y równie pamiętać, e PHP wyświetla zmienne typu DQQNGCP o wartości (CNUG jako
zmienne puste. Stąd w naszym przykładzie została wyświetlona pusta zmienna.
4[UWPGM
Dane zawierająca
zmienną typu boolean
o wartości False
4WVQYCPKG V[RÎY
Rzutowanie typów to kolejny sposób przypisywania typów zmiennych.
!RJR
UQOGFCVC
PGYV[RG )GV6[RG
UQOGFCVC
2TKPV
OKGPPC UQOGFCVC OC RT[RKUCP[ V[R OKGPPGL PGYV[RG QTC YCTVQ è
å UQOGFCVC$4 $4
OKG PC V[R UVTKPI
OKGPV[R
UVTKPI UQOGFCVC
PGYV[RG )GV6[RG
OKGPV[R
2TKPV
OKGPPC UQOGFCVC OC RT[RKUCP[ V[R OKGPPGL PGYV[RG QTC YCTVQ è
å OKGPV[R$4
OKG PC V[R KPVGIGT
OKGPV[R
KPVGIGT UQOGFCVC
11. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2
PGYV[RG )GV6[RG
OKGPV[R
2TKPV
OKGPPC UQOGFCVC OC RT[RKUCP[ V[R OKGPPGL PGYV[RG QTC YCTVQ è
å OKGPV[R$4
OKG PC V[R FQWDNG
OKGPV[R
FQWDNG UQOGFCVC
PGYV[RG )GV6[RG
OKGPV[R
2TKPV
OKGPPC UQOGFCVC OC RT[RKUCP[ V[R OKGPPGL PGYV[RG QTC YCTVQ è
å OKGPV[R$4
OKG V[R PC DQQNGCP
OKGPV[R
DQQNGCP UQOGFCVC
PGYV[RG )GV6[RG
OKGPV[R
2TKPV
OKGPPC UQOGFCVC OC RT[RKUCP[ V[R OKGPPGL PGYV[RG QTC YCTVQ è
å OKGPV[R$4
!
Najpierw przypisz wartość zmiennej:
UQOGFCVC
Wiadomo, e dla takiej wartości zmiennej, PHP ustawi typ zmiennej jako FQWDNG. Mo esz
jednak zmienić ten typ. Jeśli chcesz zmienić typ zmiennej na UVTKPI, mo esz to zrobić za
pomocą następującego polecenia:
OKGPV[R
UVTKPI UQOGFCVC
Zmienna OKGPV[R przyjmuje wartość zmiennej UQOGFCVC, ale przypisywany jest jej
typ UVTKPI. Takie rzutowanie typów jest mo liwe dla wszystkich typów zmiennych, jak
widać na przedstawionym przykładzie. Po uruchomieniu skryptu przekonasz się, jak
działa rzutowanie skryptów (pokazano to na rysunku 3.5).
4[UWPGM
Rzutowanie typów
12. 4QFKC 2TQITCOQYCPKG Y 2*2
W przedstawionym przykładzie widać, e wartość została uznana przez PHP za typ
FQWDNG. Po wykonaniu rzutowania typów, widoczne są zmiany wartości zmiennej w za-
le ności od bie ącego typu zmiennej.
1RGTCVQT[ CT[VOGV[EPG
PHP pozwala u ywać operatorów arytmetycznych na zgodnych typach zmiennych. Jakie
to typy? Wszystkie przechowujące dane w formie numerycznej (oznacza to dowolny typ
zmiennych z wyjątkiem typu DQQNGCP). W kolejnym przykładzie przedstawiony zostanie
równie operator konkatenacji (połączenia ciągów). Nie martw się, jeśli nie jesteś zazna-
jomiony z tą kwestią. Przyjrzymy się jej za moment:
!RJR
W [YCPG OKGPPG
PWO
PWO
FQFCYCPKG
UWOC PWO
PWO
2TKPV
PWO
PWO UWOC
2TKPV
$4
QFGLOQYCPKG
TQPKEC PWO PWO
2TKPV
PWO PWO TQPKEC
2TKPV
$4
FKGNGPKG
KNQTC PWO PWO
2TKPV
PWO PWO KNQTC
2TKPV
$4
OPQ GPKG
KNQE[P PWO
15. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2
Zaczynamy od przypisania wartości dwóch zmiennych, na których będziemy wykonywać
operacje arytmetyczne:
PWO
PWO
Następnie wykonujemy działanie arytmetyczne na tych zmiennych:
UWOC PWO
PWO
W końcu wyświetlany jest wynik operacji:
2TKPV
PWO
PWO UWOC
Jeśli uruchomisz skrypt, wyświetlone zostaną wyniki operacji arytmetycznych pokazane
na rysunku 3.6.
4[UWPGM
Operacje arytmetyczne
Warto nadmienić, e następująca deklaracja jest równie poprawna:
PWO
PWO
W ten sposób utworzone zmienne będą ró nych typów. Zmienna PWO jest typu KPVGIGT,
a zmienna PWO jest typu UVTKPI. Jeśli zmienisz wartości zmiennych zgodnie z poni szym
przykładem, skrypt nadal będzie działał poprawnie:
PWO
PWO CC
Skrypt nadal będzie wykonany poprawnie, ale operatory arytmetyczne nie zadziałają.
Jeśli PHP napotka dane innego typu ni numeryczne, zignoruje tę zmienną.
1RGTCVQT[ C EWEJQYG K HWPMELG
PHP udostępnia kilka sposobów pracy na zmiennych łańcuchowych (UVTKPI). Często
korzystasz ze zmiennych łańcuchowych pobranych z takiego źródła jak formularze HTML,
pliki czy bazy danych, dlatego PHP umo liwia manipulowanie tymi danymi na ró ne
sposoby.
16. 4QFKC 2TQITCOQYCPKG Y 2*2
Rozpoczniemy naszą pracę ze zmiennymi łańcuchowymi od zdefiniowania kilku zmiennych:
KOKG (QZ
URCELC
PCYKUMQ /WNFGT
æEGPKG EKæIÎY
Aby połączyć zdefiniowane wcześniej ciągi, u yj operatora konkatenacji:
KOKGAPCYKUMQ KOKG URCELC PCYKUMQ
Utworzyłeś nową zmienną łańcuchową przez połączenie trzech ciągów. Zauwa , e do
łączenia łańcuchów słu y znak kropki ().
WIQ è EKæIW
Aby poznać długość nowego ciągu, u yj funkcji UVTNGP:
FNWIQUEAEKCIW UVTNGP
KOKGAPCYKUMQ
QFCVMQYC URCELC
PHP umo liwia usuwanie dodatkowego znaku spacji (często zwanego równie „białą
spacją”) znajdującego się na końcu lub na początku łańcucha znaków. Poniewa nasz
nowy łańcuch nie kończy się ani nie zaczyna „białą spacją”, musimy ją najpierw dodać,
aby następnie u yć tych funkcji:
KOKGAPCYKUMQAKAURCELG KOKGAPCYKUMQ
Teraz mo esz usunąć początkową spację za pomocą funkcji NVTKO:
NVTKOAKOKGAPCYKUMQ NVTKO
KOKGAPCYKUMQAKAURCELG
„Białą spację” zarówno rozpoczynającą, jak i kończącą łańcuch znaków mo esz usunąć
za pomocą funkcji VTKO:
VTKOAKOKGAPCYKUMQ VTKO
KOKGAPCYKUMQAKAURCELG
9KGNMQ è NKVGT
PHP pozwala zmienić wielkość wszystkich liter w łańcuchu na wielkie lub na małe. Aby
zmienić wszystkie litery w łańcuch na wielkie, u yj funkcji UVTVQWRRGT:
KOKGAPCYKUMQAYKGNMKGNKVGT[ UVTVQWRRGT
KOKGAPCYKUMQ
Funkcja UVTVQNQYGT słu y do zamiany wszystkich liter w łańcuchu na małe:
KOKGAPCYKUMQAOCNGNKVGT[ UVTVQNQYGT
KOKGAPCYKUMQ
2QF C EWEJ[ PCMÎY
PHP umo liwia wyszukanie lokalizacji, utworzenie oraz dodanie podłańcucha do łańcucha
znaków. Do utworzenia podłańcucha znaków słu y funkcja UWDUVT:
RQFANCPEWEJ UWDUVT
KOKGAPCYKUMQ
17. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2
Jako argument podawany jest łańcuch znaków, z którego utworzony ma być podłańcuch
(w naszym przypadku jest to łańcuch KOKGAPCYKUMQ), i pozycja w łańcuchu, od której
podłańcuch ma się zaczynać (w naszym przykładzie podłańcuch ma się zaczynać od
trzeciego znaku w łańcuchu).
Mo esz odszukać lokalizację podłańcucha wewnątrz łańcucha za pomocą funkcji UVTRQU:
RQ[ELCARQFNCPEWEJ UVTRQU
KOKGAPCYKUMQ RQFANCPEWEJ
Argumentami tej funkcji jest łańcuch, wewnątrz którego podłańcuch ma być wyszukany
(u nas jest to łańcuch KOKGAPCYKUMQ), oraz wyszukiwany podłańcuch (jest to wcześniej
utworzony podłańcuch RQFANCPEWEJ).
Mo esz równie zamienić wybrany podłańcuch na inny we wskazanym łańcuchu za pomocą
funkcji UVTATGRNCEG:
RQFAKOKGAPCYKUMQ UVTATGRNCEG
(QZ 5EWNN[ KOKGAPCYKUMQ
Argumentem funkcji UVTATGRNCEG jest łańcuch, który ma być wyszukany (w naszym przy-
padku jest to (QZ ), łańcuch, którym zostanie on zastąpiony (w naszym przykładzie jest
to łańcuch 5EWNN[ ), oraz łańcuch, wewnątrz którego zamiana zostanie dokonana (w na-
szym przykładzie jest to KOKGAPCYKUMQ).
6GUVQYCPKG OGVQF QDU WIK C EWEJÎY
Mo esz sprawdzić wszystkie opisane wcześniej metody za pomocą następującego skryptu:
!RJR
C EWEJ[
KOKG (QZ
URCELC
PCYKUMQ /WNFGT
æEGPKG
KOKGAPCYKUMQ KOKG URCELC PCYKUMQ
RTKPV
KOKGAPCYKUMQ VQ PCU RQ æEQP[ C EWEJ
RTKPV
$4
F WIQ è
FNWIQUEANCPEWEJC UVTNGP
KOKGAPCYKUMQ
RTKPV
WIQ è RQ æEQPGIQ C EWEJC VQ FNWIQUEANCPEWEJC
RTKPV
$4
FQFCVMQYC URCELC
KOKGAPCYKUMQAKAURCELC KOKGAPCYKUMQ
RTKPV
C EWEJ FQFCVMQY[OK PCMCOK URCELK VQ
24. RTKPV
$4
YKGNMQ è NKVGT
KOKGAPCYKUMQAYKGNMKGNKVGT[ UVTVQWRRGT
KOKGAPCYKUMQ
RTKPV
C EWEJ RKUCP[ YKGNMKOK NKVGTCOK VQ KOKGAPCYKUMQAYKGNMKGNKVGT[
RTKPV
$4
KOKGAPCYKUMQAOCNGNKVGT[ UVTVQNQYGT
KOKGAPCYKUMQ
RTKPV
C EWEJ RKUCP[ OC [OK NKVGTCOK VQ KOKGAPCYKUMQAOCNGNKVGT[
RTKPV
$4
RQF C EWEJ[
RQF C EWEJ
RQFANCPEWEJ UWDUVT
KOKGAPCYKUMQ
RTKPV
2QF C EWEJ VQ RQFANCPEWEJ
RTKPV
$4
RQ[ELC RQF C EWEJC
RQFNCPEWEJARQ[ELC UVTRQU
KOKGAPCYKUMQ RQFANCPEWEJ
RTKPV
2Q[ELC RQF C EWEJC VQ RQFNCPEWEJARQ[ELC
RTKPV
$4
RQFOKG RQF C EWEJ
RQFAKOKGAPCYKUMQ UVTATGRNCEG
(QZ 5EWNN[ KOKGAPCYKUMQ
RTKPV
2QFOKGPKQP[ C EWEJ VQ RQFAKOKGAPCYKUMQ
RTKPV
$4
!
Jeśli uruchomisz powy szy skrypt, zobaczysz, jak działają metody obsługi łańcuchów,
co pokazano na rysunku 3.7. Zauwa , e wyświetlając wyniki działania metody konka-
tenacji, po obu stronach łańcucha umieściłem znaki
25. . Pozwala to pokazać znaki spacji
umieszczone pomiędzy tymi znakami a łańcuchem.
26. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2
4[UWPGM
Metody obsługi
łańcuchów
1RGTCVQT[ NQIKEPG K RúVNG
Kontrolowanie działania programu jest niezwykle istotną kwestią. Być mo e musisz
sprawdzić określone warunki logiczne lub wykonać pętlę po sprawdzeniu warunku.
Takie elementy były zawsze obecne w językach programowania i w tym przypadku
PHP nie jest wyjątkiem.
1RGTCVQT[ NQIKEPG
W PHP istnieje kilka sposobów sprawdzania warunków logicznych. Sprawdzając waru-
nek logiczny, porównujesz jedną wartość z inną wartością i sprawdzasz, czy są sobie równe:
!RJR
JCUNQ CD
KH
JCUNQ CD ]
RTKPV
1FPCNGKQPQ JCU Q
_
!
Ten fragment kodu wykorzystuje instrukcję KH. Składnia tej instrukcji jest prosta. Jeśli
wartość jest równa innej wartości, PHP zwraca wartość wyra enia jako „prawda”. W po-
wy szym fragmencie kodu sprawdzamy, czy wartość zmiennej JCUNQ jest równa CD.
Jeśli tak, to wyświetlany jest komunikat, jak pokazano na rysunku 3.8.
Co by się stało, gdyby wartość zmiennej JCUNQ była ró na od podanej w warunku wartości?
Poprzedni przykład nie wyświetliłby adnej wartości. Jednak za pomocą PHP równie
mo esz wykonywać określone działania, jeśli warunek nie zostanie spełniony.
27. 4QFKC 2TQITCOQYCPKG Y 2*2
4[UWPGM
Testowanie
prawdziwości
wyrażenia za pomocą
instrukcji if
!RJR
JCUNQ
KH
JCUNQ CD ]
RTKPV
1FPCNGKQPQ JCU Q
_ GNUG ]
RTKPV
0KG QFPCNGKQPQ JCU C
_
!
Jeśli wartości, której szukasz, nie odnaleziono, wykonane zostanie działanie zdefinio-
wane po instrukcji GNUG. Jeśli wartość zmiennej JCUNQ jest równa podanej wartości, to
wyświetlony zostanie komunikat 1FPCNGKQPQ JCU Q . Jeśli jednak wartość zmiennej
jest ró na od podanej wartości, to wyświetlony zostanie komunikat 0KG QFPCNGKQPQ
JCU C . Nadanie zmiennej JCUNQ wartości innej ni podana w warunku powoduje wy-
świetlenie komunikatu 0KG QFPCNGKQPQ JCU C , jak pokazano na rysunku 3.9.
4[UWPGM
Sprawdzanie
nieprawdziwości
wyrażenia za pomocą
instrukcji if else
Jeśli masz wiele warunków do sprawdzenia za pomocą instrukcji KH, mo esz to zrobić
w następujący sposób:
!RJR
JCUNQ DD
KH
JCUNQ CC ]
RTKPV
1FPCNGKQPQ JCU Q FNC W [VMQYPKMC ,CP
_
28. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2
KH
JCUNQ DD ]
RTKPV
1FPCNGKQPQ JCU Q FNC W [VMQYPKMC #NHTGF
_
KH
JCUNQ EE ]
RTKPV
1FPCNGKQPQ JCU Q FNC W [VMQYPKMC ,CEGM
_
!
Największym problemem sprawia tutaj fakt, e PHP wykona wszystkie instrukcje KH,
nawet jeśli pierwszy warunek zostanie spełniony. Aby tego uniknąć, mo esz wykorzystać
zagnie d one instrukcje KH:
!RJR
JCUNQ DD
+H
JCUNQ CC ]
2TKPV
1FPCNGKQPQ JCU Q FNC W [VMQYPKMC ,CP
_ GNUG+H
JCUNQ DD ]
2TKPV
1FPCNGKQPQ JCU Q FNC W [VMQYPKMC #NHTGF
_ GNUG+H
JCUNQ EE ]
2TKPV
1FPCNGKQPQ JCU Q FNC W [VMQYPKMC ,CEGM
_
!
Jednak, jeśli utworzyłeś wiele zagnie d onych instrukcji KH, pisany przez Ciebie kod szybko
stanie się nieczytelny. Lepszym sposobem będzie u ycie instrukcji UYKVEJ i ECUG:
!
JCUNQ DD
UYKVEJ
JCUNQ ]
ECUG CC
2TKPV
1FPCNGKQPQ JCU Q FNC W [VMQYPKMC ,CP
DTGCM
ECUG DD
2TKPV
1FPCNGKQPQ JCU Q FNC W [VMQYPKMC #NHTGF
DTGCM
ECUG EE
2TKPV
1FPCNGKQPQ JCU Q FNC W [VMQYPKMC ,CEGM
DTGCM
_
!
W tym przykładzie sprawdzana jest ka da wartość zmiennej JCUNQ w instrukcji ECUG.
Jeśli odnaleziona zostanie pasująca wartość, wyświetlany jest komunikat o odnalezieniu
hasła dla danego u ytkownika.
29. 4QFKC 2TQITCOQYCPKG Y 2*2
Zauwa , e u yto instrukcji DTGCM, aby po odszukaniu odpowiedniej wartości przerwane
zostało wykonywanie dalszych instrukcji wewnątrz instrukcji UYKVEJ. W przeciwnym
razie instrukcja UYKVEJ byłaby wykonywana analogicznie jak wcześniej przedstawiona
instrukcja KH, czyli sprawdzane zostałyby kolejno wszystkie warunki.
+VGTCELG
PHP umo liwia wykonywanie w programie pętli na kilka sposobów. Wszystkie pętle
pozwalają wykonywać serie poleceń, a do momentu, kiedy warunek wykonania pętli
zostanie spełniony, na przykład licznik osiągnie określoną wartość. Pierwszą metodą
jest pętla HQT:
!RJR
HQT
NKEPKM NKEPKM NKEPKM
]
RTKPV
NKEPKM
RTKPV
$4
_
!
Pętla HQT składa się z następujących elementów:
Wartości rozpoczynającej pętlę ― w naszym przypadku jest to 1 ( NKEPKM ).
Sposobu sprawdzania wartości. W tym przypadku, jeśli wartość zmiennej
wyniesie 10, pętla przestanie być wykonywana ( NKEPKM ).
Sposobu zmiany wartości wewnątrz pętli. W naszym przykładzie wartość jest
zwiększana o jeden przy ka dym przebiegu pętli ( NKEPKM
).
Dlatego pętla wyświetla liczby od 1 do 10 (rysunek 3.10).
4[UWPGM
Inkrementacja
licznika pętli for
od 1 do 10
Wewnątrz pętli HQT ma miejsce kilka wa nych zdarzeń. Pierwszym z nich jest testowa-
nie warunku logicznego. W naszym przykładzie sprawdzaliśmy, czy wartość zmiennej
jest równa lub mniejsza od 10. Mo esz równie sprawdzać inne warunki, jak pokazano
w tabeli 3.1.
30. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2
6CDGNC Inne warunki
Warunki Znaczenie
równy
ró ny
mniejszy ni
większy ni
większy lub równy
mniejszy lub równy
identyczny (równa wartość i taki sam typ)
Mo esz u ywać tych warunków nie tylko w połączeniu z instrukcją HQT, ale z dowolną
instrukcją, która sprawdza wartość warunku logicznego, na przykład z instrukcją KH.
Przyjrzyj się, w jaki sposób w poprzednim przykładzie zmieniana jest wartość licznika
podczas wykonywania pętli. Wartość licznika mo e być inkrementowana lub dekremen-
towana. Dekrementowanie licznika będzie miało postać:
NKEPKM
Mo emy zmienić nasz przykład w następujący sposób:
!RJR
HQT
NKEPKM NKEPKM NKEPKM ]
RTKPV
NKEPKM
RTKPV
$4
_
!
Po uruchomieniu tego skryptu pętla wykona odliczanie od 10 do 1, jak pokazano na
rysunku 3.11.
4[UWPGM
Dekrementacja
licznika w pętli for
od 10 do 1
Innym sposobem wykonania pętli jest instrukcja YJKNG:
31. 4QFKC 2TQITCOQYCPKG Y 2*2
!RJR
NKEPKM
YJKNG
NKEPKM ]
RTKPV
NKEPKM
RTKPV
$4
NKEPKM
_
!
Na początku przypisywana jest wartość początkowa zmiennej NKEPKM ― w naszym
przykładzie jest to 1:
NKEPKM
Następnie wykonywana jest pętla do chwili, gdy wartość licznika osiągnie 10:
YJKNG
NKEPKM ]
Podobnie jak w przypadku pętli HQT mo esz u yć ró nych operatorów porównania. We-
wnątrz pętli wartość zmiennej NKEPKM jest inkrementowana:
NKEPKM
Oczywiście mo esz równie zastosować podobną metodę jak w naszym drugim przy-
kładzie z pętlą HQT — dekrementować wartość licznika. Po uruchomieniu skryptu pętla
YJKNG odlicza od 1 do 10, jak pokazano na rysunku 3.12.
4[UWPGM
Inkrementowana
pętla while odliczająca
od 1 do 10
PHP umo liwia sterowanie wykonaniem pętli za pomocą instrukcji FQ YJKNG:
!RJR
NKEPKM
FQ ]
RTKPV
NKEPKM
RTKPV
$4
NKEPKM
32. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2
_ YJKNG
NKEPKM
!
Przedstawiona pętla wygląda podobnie jak pętla YJKNG. Po uruchomieniu skryptu wykonane
zostanie liczenie od 1 do 10, a następnie pętla zostanie zakończona. Czym się w takim
razie ró ni od pętli YJKNG? Ró nica pomiędzy tymi pętlami polega na lokalizacji instrukcji
YJKNG. W pętli FQ YJKNG wartość zmiennej licznika jest modyfikowana (w naszym przy-
kładzie jest inkrementowana), a następnie wartość tej zmiennej jest sprawdzana. W pętli
YJKNG wartość zmiennej jest testowana, a następnie zmieniana. Istotny jest moment zmiany
licznika i moment jego sprawdzenia. Tutaj zmienna NKEPKM przy wartości 1 nigdy nie
jest sprawdzana, poniewa przed sprawdzeniem jest inkrementowana do wartości 2.
6CDNKEG
Tablica zapewnia uporządkowany sposób przechowywania danych, do których mo na
się w prosty sposób odwoływać. Na rysunku 3.13 widać, e tablica wygląda jak talia
numerowanych kart, a na ka dej karcie jest wydrukowana wartość. Na przykład karta 3
ma nadrukowaną wartość L.
4[UWPGM
Struktura tablicy
Ka da karta w naszym przykładzie jest określana jako element tablicy. Wartość poszcze-
gólnych elementów tablicy to wartość tablicy, a do ka dego elementu tablicy mo na się
odwołać poprzez klucz. W PHP dostępnych jest kilka sposobów obsługi tablicy.
!RJR
YKCFQOQUE=? *
YKCFQOQUE=? '
YKCFQOQUE=? .
YKCFQOQUE=? .
YKCFQOQUE=? 1
YJKNG
NKUV
MNWE YCTVQUE GCEJ
YKCFQOQUE ]
RTKPV
YCTVQUE
RTKPV
MNWE VCDNKE[ MNWE TÎYPC UKú YCTVQ EK YCTVQUE
RTKPV
$4
_
!
Rozpoczynamy od utworzenia tablicy:
YKCFQOQUE=? *
YKCFQOQUE=? '
YKCFQOQUE=? .
YKCFQOQUE=? .
YKCFQOQUE=? 1
33. 4QFKC 2TQITCOQYCPKG Y 2*2
Wykorzystywana jest zmienna typu CTTC[. Mówi o tym nawias kwadratowy umieszczony
za nazwą zmiennej. Zauwa , e tablica zaczyna się od pozycji 0; w PHP wszystkie tablice
zaczynają się od tej pozycji. W naszym przykładzie wartość elementu YKCFQOQUE=? jest
równa E. Teraz, kiedy utworzona została tablica, musisz mieć mo liwość dostępu do jej ele-
mentów. PHP umo liwia odwołanie do kolejnych elementów tablicy w następujący sposób:
YJKNG
NKUV
MNWE YCTVQUE GCEJ
YKCFQOQUE ]
RTKPV
YCTVQUE
RTKPV
$4
_
Pętla YJKNG przechodzi przez kolejne elementy tablicy. Tablica jest dzielona na klucze
elementów i wartości elementów za pomocą instrukcji NKUV, a następnie instrukcja GCEJ
pobiera wartości kolejnych elementów tablicy. Wewnątrz pętli wyświetlane są kolejne
elementy tablicy:
RTKPV
MNWE VCDNKE[ MNWE TÎYPC UKú YCTVQ EK YCTVQUE
Po uruchomieniu skryptu wyświetlone zostaną kolejne elementy tablicy.
Jako kluczy poszczególnych elementów tablicy nie musisz u ywać liczb. Mo esz u ywać
dowolnych wartości. Mo emy zmienić powy szy przykład, zastępując liczby literami:
!RJR
YKCFQOQUE= # ? *
YKCFQOQUE= $ ? '
YKCFQOQUE= % ? .
YKCFQOQUE= ? .
YKCFQOQUE= ' ? 1
YJKNG
NKUV
MNWE YCTVQUE GCEJ
YKCFQOQUE ]
RTKPV
YCTVQUE
RTKPV
$4
_
!
Mo esz równie wyszukiwać wartości w tablicy, posługując się kluczem elementu:
!RJR
YKCFQOQUE= # ? *
YKCFQOQUE= $ ? '
YKCFQOQUE= % ? .
YKCFQOQUE= ? .
YKCFQOQUE= ' ? 1
YJKNG
NKUV
MNWE YCTVQUE GCEJ
YKCFQOQUE ]
KH
MNWE $ ]
RTKPV
'NGOGPV VCDNKE[ Q MNWEW MNWE OC YCTVQ è YCTVQUE
_
_
!
Powy szy kod wyszukuje element tablicy o kluczu B i wyświetla jego wartość, jak poka-
zano na rysunku 3.14.
34. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2
4[UWPGM
Wartość elementu
tablicy wyszukana
poprzez klucz tego
elementu
PHP umo liwia równie tworzenie tablicy za pomocą instrukcji CTTC[:
!
YKCFQOQUE CTTC[
# * $ ' % . . ' 1
YJKNG
NKUV
MNWE YCTVQUE GCEJ
YKCFQOQUE ]
RTKPV
MNWE VCDNKE[ MNWE TÎYPC UKú YCTVQ EK YCTVQUE
RTKPV
$4
_
!
Zmienna YKCFQOQUE zawiera tablicę utworzoną za pomocą instrukcji CTTC[. Instrukcja
CTTC[ pozwala tworzyć tablicę przez podanie kolejnych kluczy elementów i ich wartości.
Po uruchomieniu skryptu zobaczysz zawartość struktury utworzonej przez instrukcję
CTTC[, jak pokazano na rysunku 3.15.
4[UWPGM
Klucze i wartości
elementów tablicy
utworzonej przez
instrukcję array
Instrukcja CTTC[ samodzielnie nadaje klucze kolejnym elementom tablicy, jeśli nie zostaną
one osobno zdefiniowane:
!
YKCFQOQUE CTTC[
* ' . . 1
YJKNG
NKUV
MNWE YCTVQUE GCEJ
YKCFQOQUE ]
RTKPV
MNWE VCDNKE[ MNWE TÎYPC UKú YCTVQ EK YCTVQUE
RTKPV
$4
_
!
35. 4QFKC 2TQITCOQYCPKG Y 2*2
W tym przykładzie podaliśmy jedynie wartości elementów tablicy tworzonej instrukcją
CTTC[. Po uruchomieniu skryptu widać, e instrukcja CTTC[ samodzielnie nadała klucze
kolejnym elementom tablicy (patrz rysunek 3.16).
4[UWPGM
Klucze kolejnych
elementów tablicy
są automatycznie
tworzone przy użyciu
instrukcji array
5QTVQYCPKG VCDNKE[
Zdarza się, e tablica zawiera nieuporządkowane elementy; wartości elementów i kluczy
nie są umieszczone na kolejnych pozycjach tablicy i nale y je uporządkować. Tworzenie
fragmentów kodu, który wykonuje porządkowanie tablicy mo e być bardzo czasochłonne
(nawet, jeśli korzystamy z napisanych przez innych programistów fragmentów kodu).
Na szczęście PHP zawiera zestaw instrukcji, które słu ą do tego celu.
W kolejnych punktach omówimy cztery typy instrukcji UQTV przeznaczonej do sortowania
tablicy według wartości elementów tablicy lub ich kluczy.
(WPMELC UQTV
Instrukcja UQTV pozwala posortować wartości elementów tablicy w porządku rosnącym:
!RJR
UQTVQYCPKG CYCTVQ EK VCDNKE[ Y RQTæFMW TQUPæE[O
PWOGTMK CTTC[
PKGWRQTæFMQYCPG
RTKPV
PKGWRQTæFMQYCPC VCDNKEC $4
YJKNG
NKUV
MNWE YCTVQUE GCEJ
PWOGTMK ]
RTKPV
'NGOGPV Q MNWEW MNWE OC YCTVQ è YCTVQUE
RTKPV
$4
_
RTKPV
$4
WRQTæFMQYCPG
RTKPV
WRQTæFMQYCPC VCDNKEC $4
UQTV
PWOGTMK
36. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2
YJKNG
NKUV
MNWE YCTVQUE GCEJ
PWOGTMK ]
RTKPV
'NGOGPV Q MNWEW MNWE OC YCTVQ è YCTVQUE
RTKPV
$4
_
!
Powy szy fragment kodu powoduje utworzenie tablicy za pomocą instrukcji CTTC[, która
samodzielnie nadaje klucze kolejnym elementom tablicy. Następnie skrypt wyświetla
zawartość nieuporządkowanej tablicy, porządkuje elementy tablicy i ponownie wyświetla
zawartość tablicy, tym razem ju posortowaną.
(WPMELC CUQTV
Zauwa , e podczas sortowania tablicy przy u yciu instrukcji UQTV zmieniane są klucze
elementów tablicy. Przed sortowaniem klucz 0 wskazywał wartość 5, natomiast po sor-
towaniu ten sam klucz wskazywał wartość 1. Mo esz zachować pary klucz-wskazywany
element, równocześnie porządkując rosnąco elementy tablicy. Jak? U yj funkcji CUQTV:
!RJR
UQTVQYCPKG CYCTVQ EK VCDNKE[ Y RQTæFMW TQUPæE[O CEJQYWLæE RT[RKUCPKC MNWE[
YKCFQOQUE CTTC[
# $ % '
PKGWRQTæFMQYCPG
RTKPV
PKGWRQTæFMQYCPC VCDNKEC $4
YJKNG
NKUV
MNWE YCTVQUE GCEJ
YKCFQOQUE ]
RTKPV
'NGOGPV Q MNWEW MNWE OC YCTVQ è YCTVQUE
RTKPV
$4
_
RTKPV
$4
WRQTæFMQYCPG
RTKPV
WRQTæFMQYCPC VCDNKEC $4
CUQTV
YKCFQOQUE
YJKNG
NKUV
MNWE YCTVQUE GCEJ
YKCFQOQUE ]
RTKPV
'NGOGPV Q MNWEW MNWE OC YCTVQ è YCTVQUE
RTKPV
$4
_
!
W naszym kodzie podczas definiowania tablicy podawane są zarówno wartości elemen-
tów, jak i ich klucze, jednak mo esz równie skorzystać z automatycznego nadawania
kluczy przez wykorzystanie instrukcji CTTC[, podobnie jak w poprzednim przykładzie
opisującym instrukcję UQTV. Następnie skrypt wyświetla zawartość nieuporządkowanej
tablicy, sortuje elementy tablicy za pomocą instrukcji CUQTV i ponownie wyświetla za-
wartość tablicy, jak pokazano na rysunku 3.17.
Elementy tablicy zostały uporządkowane, ale powiązania pomiędzy kluczami i elemen-
tami tablicy pozostały niezmienione. Na przykład klucz E wskazuje element tablicy o war-
tość 4 przed i po sortowaniu.
37. 4QFKC 2TQITCOQYCPKG Y 2*2
4[UWPGM
Tablica posortowana
w porządku rosnącym
z wykorzystaniem
instrukcji asort,
która nie modyfikuje
powiązań kluczy
z elementami tablicy
(WPMELC TUQTV
Mo liwe jest równie posortowanie elementów tablicy w porządku malejącym za pomocą
funkcji TUQTV:
!RJR
UQTVQYCPKG VCDNKE[ Y RQTæFMW OCNGLæE[O
YKCFQOQUE CTTC[
PKGRQUQTVQYCPC
RTKPV
PKGRQUQTVQYCPC VCDNKEC$4
YJKNG
NKUV
MNWE YCTVQUE GCEJ
YKCFQOQUE ]
RTKPV
'NGOGPV Q MNWEW MNWE OC YCTVQ è YCTVQUE
RTKPV
$4
_
RTKPV
$4
RQUQTVQYCPC
RTKPV
RQUQTVQYCPC VCDNKEC$4
TUQTV
YKCFQOQUE
YJKNG
NKUV
MNWE YCTVQUE GCEJ
YKCFQOQUE ]
RTKPV
'NGOGPV Q MNWEW MNWE OC YCTVQ è YCTVQUE
RTKPV
$4
_
!
Powy szy przykład działa analogiczne jak przykładowy skrypt opisujący funkcję UQTV.
Funkcja TUQTV sortuje tablicę w porządku malejącym.
38. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2
(WPMELC MUQTV
PHP umo liwia sortowanie kluczy tablicy w porządku rosnącym za pomocą funkcji MUQTV:
!RJR
UQTVQYCPKG MNWE[ VCDNKE[ Y RQTæFMW TQUPæE[O
YKCFQOQUE CTTC[
$ % # '
PKGWRQTæFMQYCPG
RTKPV
PKGWRQTæFMQYCPC VCDNKEC $4
YJKNG
NKUV
MNWE YCTVQUE GCEJ
YKCFQOQUE ]
RTKPV
'NGOGPV Q MNWEW MNWE OC YCTVQ è YCTVQUE
RTKPV
$4
_
RTKPV
$4
WRQTæFMQYCPG
MUQTV
YKCFQOQUE
RTKPV
WRQTæFMQYCPC VCDNKEC $4
YJKNG
NKUV
MNWE YCTVQUE GCEJ
YKCFQOQUE ]
RTKPV
'NGOGPV Q MNWEW MNWE OC YCTVQ è YCTVQUE
RTKPV
$4
_
!
Powy szy skrypt wygląda analogiczne jak poprzednie przykłady, z tą ró nicą, e wyko-
rzystuje instrukcję MUQTV do porządkowania tablicy.
W tym przykładzie kluczami elementów tablicy są litery. Po posortowaniu za pomocą
instrukcji MUQTV, klucze są sortowane w porządku alfabetycznym.
-QF UVTWMVWTCNP[ K MQF YKGNQMTQVPGIQ W [VMW
Moje pierwsze spotkanie z programowaniem miało miejsce na studiach. Moim nauczy-
cielem był Chris Pickford, a był on jednym z najbardziej cierpliwych ludzi, jakich spo-
tkałem w yciu. Chris dawał z siebie wszystko, próbując nauczyć grupę niedoświadczonych,
ale bardzo chętnych, programistów podstaw i zalet programowania strukturalnego i nada-
jącego się do wielokrotnego wykorzystania kodu. Dopiero kiedy zacząłem yć z progra-
mowania zrozumiałem, jak wa ne było to, czego nauczył mnie Chris. Ten punkt dedykuję
Tobie, Chris.
Kod strukturalny i kod wielokrotnego u ytku pozwala rozbić program na uporządkowane
fragmenty, w celu efektywnego wykorzystania fragmentów kodu wewnątrz aplikacji.
Takie podejście jest korzystne, poniewa aplikacja mo e wielokrotnie wykonywać te
same zadania, takie jak łączenie się z bazą danych, wystawianie zapytania do bazy danych
39. 4QFKC 2TQITCOQYCPKG Y 2*2
i wyświetlanie danych otrzymanych z bazy danych. Podzielenie aplikacji na fragmenty
pozwala zmniejszyć mo liwość wystąpienia błędów oraz skrócić czas tworzenia aplikacji
(oszczędzanie czasu to zawsze wa na rzecz). PHP pozwala dzielić kod na kilka sposobów
przy wykorzystaniu funkcji, klas i dołączanych bibliotek.
-QT[UVCPKG HWPMELK
Korzystanie z funkcji to jeden z najprostszych sposobów dzielenia kodu na fragmenty,
które mogą być wielokrotnie wykorzystywane.
!RJR
HWPEVKQP 9KCFQOQUE2QYKVCNPC
KOKG ]
TGVWTP *GNNQ KOKG
_
YTQV 9KCFQOQUE2QYKVCNPC
#PFTGL
RTKPV
YTQV
!
W powy szym przykładzie utworzona została funkcja wyświetlająca wiadomość. Do
funkcji jako argument przesyłane jest imię, które następnie jest umieszczane jako część
wyświetlanej wiadomości. Najpierw tworzona jest funkcja:
HWPEVKQP 9KCFQOQUE2QYKVCNPC
KOKG ]
TGVWTP *GNNQ KOKG
_
Zauwa , e wyniki wykonania funkcji są zwracane w następujący sposób:
TGVWTP *GNNQ KOKG
Innymi słowy, instrukcja TGVWTP zwraca wyniki wykonania funkcji po jej wywołaniu.
Dlatego, aby pobrać wyniki wykonania funkcji, nale y zapisać je jako zmienną:
YTQV 9KCFQOQUE2QYKVCNPC
#PFTGL
W końcu wyświetlane są wyniki wykonania funkcji:
RTKPV
YTQV
Po uruchomieniu skryptu wyświetlone zostaną wyniki wywołania funkcji.
2TGMC[YCPKG FCP[EJ RTG OKGPPæ NWD RTG YCTVQ è
Za pomocą funkcji mo na równie modyfikować zawartość przekazywanych do nich
zmiennych. Przekazując zmienną do funkcji, mo esz zachować niezmienioną wartość
zmiennej po zakończeniu wykonywania funkcji (nazywane jest to przekazywaniem przez
wartość) lub zmienić dane (nazywamy to przekazywaniem przez zmienną).
!RJR
HWPEVKQP 9JQ+U%QQN
CTIWOGPV ]
CTIWOGPV Uæ EQQN
40. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2
_
PCYC 2TQITCOK EK 2*2
RTG YCTVQ è
9JQ+U%QQN
PCYC
RTKPV
PCYC
PQYC NKPKC
RTKPV
$4
RTG OKGPPæ
9JQ+U%QQN
PCYC
RTKPV
PCYC
!
Powy szy kod modyfikuje zmienną PCYC. Najpierw zmiennej nadawana jest wartość:
PCYC 2TQITCOK EK 2*2
Funkcja łączy łańcuch danych ze zmienną łańcuchową przekazywaną do funkcji:
HWPEVKQP 9JQ+U%QQN
CTIWOGPV ]
CTIWOGPV Uæ EQQN
_
Następnie wywoływana jest funkcja, do której argument jest przekazywany przez wartość
i wyniki działania funkcji są wyświetlane. Zauwa , e w PHP argumenty do funkcji są
domyślnie przekazywane przez wartość:
9JQ+U%QQN
PCYC
RTKPV
PCYC
Następnie ta sama funkcja jest wywoływana z przekazaniem argumentu przez zmienną,
a wynik działania funkcji jest wyświetlany.
9JQ+U%QQN
PCYC
RTKPV
PCYC
Aby przekazać do funkcji argument przez zmienną, nale y dodać znak przed zmienną
przekazywaną do funkcji (jak na przykład PCOG). Po uruchomieniu skryptu widać, e
przy wywołaniu funkcji z przekazaniem argumentu przez wartość, wartość zmiennej łańcu-
chowej pozostaje niezmieniona (patrz rysunek 3.18). Jednak przy przekazaniu argumentu
przez zmienną, jej wartość jest zmieniana.
4[UWPGM
Wyniki przekazania
argumentu
przez wartość
i przez zmienną
41. 4QFKC 2TQITCOQYCPKG Y 2*2
-QT[UVCPKG QDKGMVÎY
PHP pozwala na rozbudowywanie i wielokrotne wykorzystanie napisanego fragmentu
kodu w postaci obiektów. Obiekty PHP umo liwiają dzielenie kodu na segmenty, które
w PHP są określane jako klasy. Jest to kolejny krok w kierunku strukturyzacji i wielo-
krotnego wykorzystania kodu, poniewa umo liwia całkowite oddzielenie ró nych części
aplikacji. Rozdzielając w ten sposób kod, programista ma pewność, e podczas testowania
i uruchamiania segmentu kodu wszystkie potrzebne instrukcje i definicje znajdują się
w jednej klasie. Jak, w takim razie, korzystać z obiektów w PHP?
!RJR
ENCUU OQLCMNCUC ]
HWPEVKQP 9KCFQOQUE2QYKVCNPC
CTIWOGPV]
TGVWTP 9KVCL CTIWOGPV
_
_
VYQTGPKG PQYGL MQRKK MNCU[
OQLQDKGMV PGY OQLCMNCUC
Y[YQ CPKG HWPMELK 9KCFQOQUE2QYKVCNPC K CRKUCPKG Y[PKMW Y[MQPCPKC HWPMELK
YTQV OQLQDKGMV 9KCFQOQUE2QYKVCNPC
#PFTGL
Y[ YKGVNGPKG Y[PKMÎY
RTKPV
YTQV
!
Najpierw nale y zdefiniować klasę dla naszego obiektu:
ENCUU OQLCMNCUC ]
HWPEVKQP 9KCFQOQUE2QYKVCNPC
CTIWOGPV]
TGVWTP 9KVCL CTIWOGPV
_
_
Nale y tutaj wspomnieć o kilku istotnych kwestiach. Po pierwsze, cały kod dotyczący
klasy jest umieszczony wewnątrz nawiasów funkcji klasy. Po drugie, zauwa , e funkcja
9KCFQOQUE2QYKVCNPC u yta w poprzednich przykładach tego rozdziału, ponownie się
pojawia. Nie ma obowiązku umieszczania definiowanych funkcji wewnątrz klasy, ale
jest to naturalny krok, jeśli dą ysz do strukturyzacji kodu. Podobnie jak w poprzednich
przykładach, funkcja 9KCFQOQUE2QYKVCNPC pobiera dane poprzez argument, dokleja dane
do zmiennej i zwraca zmienną jako wynik działania.
OQLQDKGMV PGY OQLCMNCUC
W dalszej części tworzonego kodu mo esz wykorzystywać zdefiniowaną wcześniej klasę.
W tym celu musisz najpierw stworzyć kopię obiektu i przypisać ją do zmiennej. W jakim
celu? Jest to kolejny krok w kierunku wielokrotnego wykorzystania fragmentu kodu.
Mo esz korzystać z tego samego obiektu, nadając mu ró ne wartości i uzyskując ró ne
wyniki. Nie mo esz jednak u ywać tego samego obiektu, równocześnie nadając mu ró ne
wartości, dlatego musisz utworzyć kilka kopii tego obiektu i u ywać tych kopii. W naszym
przykładzie obiekt jest wykorzystywany tylko jeden raz, ale zasady składni pozostają
niezmienione. Kopia obiektu jest przypisana do zmiennej OQLQDKGMV:
YTQV OQLQDKGMV 9KCFQOQUE2QYKVCNPC
#PFTGL
42. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2
Teraz mo esz korzystać z obiektu. W PHP obowiązuje następująca składnia:
-QRKC1DKGMVW 0CYC(WPMELK
W tym przykładzie wywoływana jest funkcja 9KCFQOQUE2QYKVCNPC obiektu OQLCMNCUC.
Po uruchomieniu skryptu pojawią się wyniki wywołania funkcji wewnątrz obiektu. Ten
przykład jest raczej prosty. Aby przedstawić zalety wynikające z wykorzystania obiektów
w PHP, musimy go rozbudować:
!RJR
ENCUU OQLCMNCUC ]
XCT Y[UYKGVNCPCPCYC 9U[UE[
HWPEVKQP QFCL0CYG
CTIWOGPV]
VJKU Y[UYKGVNCPCPCYC CTIWOGPV
_
HWPEVKQP 9KCFQOQUE2QYKVCNPC
]
TGVWTP 9KVCL VJKU Y[UYKGVNCPCPCYC
_
_
VYQTGPKG RKGTYUGL MQRKK MNCU[
OQLQDKGMV PGY OQLCMNCUC
Y[YQ CPKG HWPMELK 9KCFQOQUE2QYKVCNPC K CRKUCPKG Y[PKMW Y[MQPCPKC HWPMELK
YTQV OQLQDKGMV 9KCFQOQUE2QYKVCNPC
Y[ YKGVNGPKG Y[PKMÎY
RTKPV
YTQV
RTKPV
$4
VYQTGPKG FTWIKGL MQRKK MNCU[
OQLQDKGMV PGY OQLCMNCUC
OQLQDKGMV QFCL0CYG
#PFTGL
YTQV OQLQDKGMV 9KCFQOQUE2QYKVCNPC
Y[ YKGVNGPKG Y[PKMÎY
RTKPV
YTQV
!
W tym przypadku klasa składa się z kilku elementów:
ENCUU OQLCMNCUC ]
XCT Y[UYKGVNCPCPCYC 9U[UE[
HWPEVKQP QFCL0CYG
CTIWOGPV]
VJKU Y[UYKGVNCPCPCYC CTIWOGPV
_
HWPEVKQP 9KCFQOQUE2QYKVCNPC
]
TGVWTP 9KVCL VJKU Y[UYKGVNCPCPCYC
_
_
43. 4QFKC 2TQITCOQYCPKG Y 2*2
Najpierw zdefiniowano zmienną wewnątrz klasy. Na niej operuje kod znajdujący się
wewnątrz definicji klasy i dlatego jest określana jako zmienna klasy.
XCT Y[UYKGVNCPCPCYC 9U[UE[
Musisz zadeklarować zmienną klasy przy u yciu instrukcji XCT. Dzięki temu PHP „wie”,
co jest zmienną, a co funkcją.
W naszym przykładzie obiekt zawiera dwie funkcje:
HWPEVKQP QFCL0CYG
CTIWOGPV]
VJKU Y[UYKGVNCPCPCYC CTIWOGPV
_
HWPEVKQP 9KCFQOQUE2QYKVCNPC
]
TGVWTP 9KVCL VJKU Y[UYKGVNCPCPCYC
_
Pierwsza z nich pobiera argument i przypisuje zmiennej klasy wartość tego argumentu:
HWPEVKQP QFCL0CYG
CTIWOGPV]
VJKU Y[UYKGVNCPCPCYC CTIWOGPV
_
Zwróć uwagę na składnię przypisania zmiennej klasy:
VJKU Y[UYKGVNCPCPCYC CTIWOGPV
Odwołanie dotyczy zmiennej Y[UYKGVNCPCPCYC zdefiniowanej w bie ącej klasie. U ycie
następującej składni gwarantuje, e odwołanie dotyczy zmiennej klasy i PHP nie pomyli
jej z inną zmienną znajdującą się poza klasą.
HWPMELC 9KCFQOQUE2QYKVCNPC
]
TGVWTP 9KVCL VJKU Y[UYKGVNCPCPCYC
_
Druga funkcja przekazuje wartość zmiennej klasy poza klasę. Kod wywołujący klasę
spełnia dwa zadania. Najpierw tworzy kopię klasy i wyświetla wartość zmiennej klasy:
OQLQDKGMV PGY OQLCMNCUC
YTQV OQLQDKGMV 9KCFQOQUE2QYKVCNPC
RTKPV
YTQV
Następnie tworzy kolejną kopię klasy i przekazuje wartość funkcji QFCL0CYG w celu
przypisania wartości zmiennej klasy. Ostatnim krokiem jest wyświetlenie nowej wartości
zmiennej klasy:
OQLQDKGMV PGY OQLCMNCUC
OQLQDKGMV QFCL0CYG
#PFTGL
YTQV OQLQDKGMV 9KCFQOQUE2QYKVCNPC
Y[ YKGVNGPKG Y[PKMÎY
RTKPV
YTQV
Po uruchomieniu skryptu zobaczysz wyniki wykonania dwóch części skryptu; w pierwszej
części wartość zmiennej klasy pozostawała niezmieniona, w drugiej części widoczna jest
nowa wartość zmiennej klasy, jak pokazano na rysunku 3.19.
44. %ú è ++ 9RTQYCFGPKG FQ RTQITCOQYCPKC Y 2*2
4[UWPGM
Zmiana wartości
zmiennej klasy
2QFUWOQYCPKG
W tym rozdziale pokrótce przyjrzeliśmy się ró nym rodzajom edytorów w systemie
Windows, za pomocą których mo esz tworzyć skrypty PHP. Omówiliśmy równie pod-
stawy języka PHP, takie jak składnia, zmienne, tablice, operatory logiczne i pętle, funkcje
i obiekty. Rozdział 4., „PHP i pliki”, poświęcony jest współpracy PHP z plikami oraz
systemem plików Windows.