You are on page 1of 32

IDZ DO

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

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

PHP, MySQL i Apache


dla kadego. Wydanie II
Autor: Julie C. Meloni
Tumaczenie: Adam Byrtek (wprowadzenie, rozdz. 1 14),
Jarosaw Dobrzaski (rozdz. 15 32)
ISBN: 83-7361-877-5
Tytu oryginau: Sams Teach Yourself PHP,
MySQL and Apache All in One, 2nd Edition
Format: B5, stron: 588
Stwrz wasn dynamiczn witryn WWW
Zainstaluj i skonfiguruj PHP oraz serwery Apache i MySQL
Naucz si zasad programowania w PHP
Pocz aplikacj WWW z baz danych
Poznaj sekrety zabezpieczania i optymalizowania aplikacji sieciowych
Dynamiczne witryny WWW spotykamy w sieci coraz czciej. Po mechanizmy
bazodanowe i technologie skryptowe dziaajce po stronie serwera sigaj ju nie
tylko twrcy portali i sklepw internetowych, ale take ci, ktrym jeszcze do niedawna
wystarcza zwyky, statyczny HTML. Wrd technologii wykorzystywanych do
tworzenia dynamicznych stron WWW od dawna prym wiedzie duet PHP i MySQL,
instalowany na serwerach WWW pracujcych pod kontrol Apachea. Te wanie
narzdzia s najczciej wykorzystywane do tworzenia galerii, forw dyskusyjnych,
gied ogoszeniowych i wielu innych aplikacji WWW.
PHP, MySQL i Apache dla kadego. Wydanie II to podrcznik dla wszystkich,
ktrzy chc pozna zasady tworzenia dynamicznych witryn WWW z wykorzystaniem
najpopularniejszych obecnie technologii. Ksika opisuje proces instalacji i konfiguracji
Apachea, MySQL-a i PHP na serwerze oraz na stacji roboczej, elementy jzyka PHP
oraz zasady stosowania jzyka SQL. Na praktycznych przykadach przedstawia
moliwoci wykorzystywania PHP i bazy danych do tworzenia elementw
dynamicznych stron WWW oraz caych projektw. Czytajc j, nauczysz si
zabezpiecza aplikacje WWW oraz poprawia wydajno ich dziaania.
Instalowanie i konfigurowanie narzdzi
Programowanie w jzyku PHP
Funkcje, tablice i obiekty
Przetwarzanie danych z formularzy
Obsuga sesji oraz systemu plikw
Dynamiczne generowanie grafiki
Integracja PHP z MySQL
Operacje na danych w tabelach i jzyk SQL
Tworzenie prostych projektw aplikacji WWW
Monitorowanie pracy aplikacji
Mechanizmy bezpieczestwa i uwierzytelniania uytkownikw
Poprawa wydajnoci aplikacji

Spis treci
O Autorach ..................................................................................... 15
Podzikowania ................................................................................ 17
Wprowadzenie ................................................................................ 19

Cz I

Podstawy ......................................................................23

Rozdzia 1. Szybka instalacja ............................................................................ 25


Instalacja w systemie Linux/Unix .................................................................................. 25
Instalacja MySQL .................................................................................................... 26
Instalacja Apache ..................................................................................................... 27
Instalacja PHP .......................................................................................................... 27
Instalacja w systemie Windows ...................................................................................... 29
Instalacja MySQL .................................................................................................... 29
Instalacja Apache ..................................................................................................... 30
Instalacja PHP .......................................................................................................... 32
Rozwizywanie problemw ........................................................................................... 34

Rozdzia 2. Instalacja i konfiguracja MySQL ...................................................... 37


Wersja aktualna i przysze wersje MySQL ................................................................... 37
Jak zdoby MySQL ........................................................................................................ 38
Instalacja MySQL w systemie Linux/Unix .................................................................... 38
Instalacja MySQL w systemie Windows ........................................................................ 39
Rozwizywanie problemw instalacji ............................................................................ 43
Podstawy bezpieczestwa .............................................................................................. 44
Uruchamianie MySQL ............................................................................................. 45
Zabezpieczanie poczenia MySQL ......................................................................... 45
Wprowadzenie do systemu uprawnie MySQL ............................................................. 46
Dwustopniowa autoryzacja ...................................................................................... 47
Korzystanie z systemu uprawnie .................................................................................. 48
Dodawanie uytkownikw ....................................................................................... 48
Usuwanie uprawnie ................................................................................................ 50
Podsumowanie ............................................................................................................... 51
Pytania i odpowiedzi ...................................................................................................... 51
Warsztaty ........................................................................................................................ 52
Test ........................................................................................................................... 52
Odpowiedzi .............................................................................................................. 52
wiczenia ................................................................................................................. 52

PHP, MySQL i Apache dla kadego

Rozdzia 3. Instalacja i konfiguracja Apache ..................................................... 53


Wersja aktualna i przysze wersje Apache ...................................................................... 53
Wybr sposobu instalacji ............................................................................................... 54
Kompilacja kodu rdowego .................................................................................. 54
Instalacja dystrybucji binarnej ................................................................................. 54
Instalacja Apache w systemie Linux/Unix ..................................................................... 55
Pobieranie kodu rdowego .................................................................................... 55
Rozpakowanie kodu rdowego ............................................................................. 55
Przygotowania do kompilacji Apache ...................................................................... 56
Budowanie i instalacja Apache ................................................................................ 57
Instalacja Apache w systemie Windows ......................................................................... 57
Format pliku konfiguracyjnego Apache ......................................................................... 60
Dyrektywy ................................................................................................................ 60
Pojemniki ................................................................................................................. 62
Instrukcje warunkowe .............................................................................................. 63
ServerRoot ............................................................................................................... 64
Pliki konfiguracyjne dla katalogw .......................................................................... 64
Pliki dziennika Apache ................................................................................................... 65
access_log ................................................................................................................ 65
error_log ................................................................................................................... 66
Pozostae pliki .......................................................................................................... 66
Polecenia zwizane z Apache ......................................................................................... 66
Serwer Apache ......................................................................................................... 66
Skrypt kontrolny Apache ......................................................................................... 68
Pierwsze uruchomienie Apache ...................................................................................... 68
Sprawdzanie pliku konfiguracyjnego ....................................................................... 68
Uruchamianie Apache .............................................................................................. 69
Rozwizywanie problemw ........................................................................................... 69
Inny serwer WWW .................................................................................................. 69
Brak uprawnie do portu .......................................................................................... 70
Dostp zabroniony ................................................................................................... 70
Ze parametry grupy ................................................................................................. 71
Podsumowanie ............................................................................................................... 71
Pytania i odpowiedzi ...................................................................................................... 71
Warsztaty ........................................................................................................................ 72
Test ........................................................................................................................... 72
Odpowiedzi .............................................................................................................. 72
wiczenia ................................................................................................................. 72

Rozdzia 4. Instalacja i konfiguracja PHP .......................................................... 73


Wersja aktualna i przysze wersje PHP .......................................................................... 73
Kompilacja PHP w systemie Linux/Unix ....................................................................... 74
Dodatkowe opcje konfiguracyjne ............................................................................. 75
Integracja PHP z Apache w systemie Linux/Unix ................................................... 75
Instalacja PHP w systemie Windows ............................................................................. 76
Integracja PHP z Apache w systemie Windows ....................................................... 76
Plik php.ini ..................................................................................................................... 77
Testowanie ..................................................................................................................... 78
Gdzie znale pomoc ...................................................................................................... 78
Podstawy skryptw PHP ................................................................................................ 80
Pocztek i koniec bloku instrukcji PHP ................................................................... 81
Instrukcja echo i funkcja print() ............................................................................... 82
czenie HTML i PHP ............................................................................................. 83
Komentarze w kodzie PHP ...................................................................................... 83
Podsumowanie ............................................................................................................... 85
Pytania i odpowiedzi ...................................................................................................... 85

Spis treci

5
Warsztaty ........................................................................................................................ 86
Test ........................................................................................................................... 86
Odpowiedzi .............................................................................................................. 86
wiczenia ................................................................................................................. 86

Cz II

Struktura jzyka PHP ....................................................87

Rozdzia 5. Podstawowe elementy jzyka PHP .................................................. 89


Zmienne .......................................................................................................................... 89
Zmienne globalne i superglobalne ........................................................................... 91
Typy danych ................................................................................................................... 92
Zmiana typu za pomoc settype() ............................................................................. 94
Zmiana typu poprzez rzutowanie ............................................................................. 95
Po co sprawdza typ? ............................................................................................... 97
Operatory i wyraenia .................................................................................................... 97
Operator przypisania ................................................................................................ 98
Operatory arytmetyczne ........................................................................................... 98
Operator konkatenacji .............................................................................................. 98
Zoony operator przypisania ................................................................................... 99
Inkrementacja i dekrementacja wartoci zmiennej cakowitej ............................... 100
Operatory porwnania ............................................................................................ 101
Tworzenie zoonych wyrae za pomoc operatorw logicznych ........................ 102
Kolejno operatorw ............................................................................................ 103
Stae .............................................................................................................................. 104
Stae predefiniowane .............................................................................................. 105
Podsumowanie ............................................................................................................. 105
Pytania i odpowiedzi .................................................................................................... 105
Warsztaty ...................................................................................................................... 106
Test ......................................................................................................................... 106
Odpowiedzi ............................................................................................................ 107
wiczenia ............................................................................................................... 107

Rozdzia 6. Sterowanie przepywem w PHP ...................................................... 109


Zmiana przepywu ........................................................................................................ 110
Instrukcja if ............................................................................................................ 110
Uycie klauzuli else w instrukcji if ........................................................................ 111
Uycie klauzuli else if w instrukcji if ..................................................................... 111
Instrukcja switch .................................................................................................... 113
Operator ? ............................................................................................................... 114
Ptle .............................................................................................................................. 115
Instrukcja while ...................................................................................................... 115
Instrukcja dowhile .............................................................................................. 116
Instrukcja for .......................................................................................................... 117
Przerywanie ptli za pomoc instrukcji break ........................................................ 118
Pomijanie iteracji za pomoc instrukcji continue ................................................... 120
Zagniedone ptle ................................................................................................ 121
Bloki kodu PHP ............................................................................................................ 122
Podsumowanie ............................................................................................................. 124
Pytania i odpowiedzi .................................................................................................... 124
Warsztaty ...................................................................................................................... 124
Test ......................................................................................................................... 125
Odpowiedzi ............................................................................................................ 125
wiczenie ............................................................................................................... 126

PHP, MySQL i Apache dla kadego

Rozdzia 7. Funkcje ........................................................................................ 127


Czym jest funkcja? ....................................................................................................... 127
Wywoywanie funkcji .................................................................................................. 128
Definiowanie funkcji .................................................................................................... 129
Zwracanie wartoci przez funkcje uytkownika ........................................................... 131
Zasig zmiennych ......................................................................................................... 132
Wywoywanie zmiennych za pomoc instrukcji global ......................................... 133
Przechowywanie wartoci pomidzy wywoaniami funkcji za pomoc instrukcji static .......135
Wicej o argumentach .................................................................................................. 137
Przypisywanie zmiennym wartoci domylnych .................................................... 137
Przekazywanie zmiennych przez referencj ........................................................... 139
Sprawdzanie istnienia funkcji ....................................................................................... 140
Podsumowanie ............................................................................................................. 142
Pytania i odpowiedzi .................................................................................................... 142
Warsztaty ...................................................................................................................... 142
Test ......................................................................................................................... 142
Odpowiedzi ............................................................................................................ 143
wiczenie ............................................................................................................... 143

Rozdzia 8. Tablice i obiekty ........................................................................... 145


Czym jest tablica? ........................................................................................................ 145
Tworzenie tablic ........................................................................................................... 146
Tworzenie tablic asocjacyjnych ............................................................................. 147
Tworzenie tablic wielowymiarowych .................................................................... 147
Niektre funkcje operujce na tablicach .......................................................................... 149
Tworzenie obiektu ........................................................................................................ 151
Wasnoci obiektw ............................................................................................... 152
Metody obiektw ................................................................................................... 153
Konstruktor ............................................................................................................ 155
Dziedziczenie ............................................................................................................... 155
Podsumowanie ............................................................................................................. 157
Pytania i odpowiedzi .................................................................................................... 157
Warsztaty ...................................................................................................................... 157
Test ......................................................................................................................... 157
Odpowiedzi ............................................................................................................ 158
wiczenia ............................................................................................................... 158

Cz III Pierwsze kroki z kodem ...............................................159


Rozdzia 9. Cigi znakw, data i czas .............................................................. 161
Formatowanie cigw znakw ..................................................................................... 162
Funkcja printf() ...................................................................................................... 162
Zamiana argumentw ............................................................................................. 168
Przechowywanie sformatowanych cigw znakw ............................................... 169
Analizowanie cigw znakw ...................................................................................... 170
Uwaga na temat indeksowania cigw znakw ..................................................... 170
Sprawdzanie dugoci cigu za pomoc funkcji strlen() ........................................ 170
Znajdowanie podcigu za pomoc strstr() .............................................................. 171
Okrelanie pozycji podcigu za pomoc funkcji strpos() ....................................... 171
Pobieranie czci cigu za pomoc funkcji substr() ............................................... 172
Podzia cigu na sowa za pomoc funkcji strtok() ................................................ 172
Operacje na cigach znakw ........................................................................................ 174
Oczyszczanie cigu za pomoc funkcji trim(), ltrim(), rtrim() i strip_tags() .......... 174
Zmiana fragmentu cigu za pomoc funkcji substr_replace() ................................ 175
Zamiana podcigw za pomoc funkcji str_replace() ............................................ 176

Spis treci

7
Zmiana wielkoci liter ............................................................................................ 176
Zawijanie tekstu za pomoc funkcji wordwrap() i nl2br() ..................................... 177
Dzielenie cigw za pomoc funkcji explode() ...................................................... 179
Funkcje operujce na dacie i czasie .............................................................................. 179
Pobieranie biecej daty za pomoc funkcji time() ................................................ 179
Konwersja znacznika czasu za pomoc funkcji getdate() ....................................... 180
Formatowanie znacznika czasu za pomoc funkcji date() ...................................... 181
Tworzenie znacznika czasu za pomoc funkcji mktime() ...................................... 183
Weryfikacja daty za pomoc funkcji checkdate() ................................................... 184
Podsumowanie ............................................................................................................. 185
Pytania i odpowiedzi .................................................................................................... 185
Warsztaty ...................................................................................................................... 185
Test ......................................................................................................................... 185
Odpowiedzi ............................................................................................................ 186
wiczenia ............................................................................................................... 186

Rozdzia 10. Formularze ................................................................................... 189


Tworzenie prostego formularza .................................................................................... 189
Przekazywanie informacji w tablicach ......................................................................... 191
czenie kodu HTML i PHP w jednym skrypcie ......................................................... 194
Zapisywanie informacji o stanie w ukrytym polu ......................................................... 196
Przekierowania ............................................................................................................. 197
Wysyanie poczty elektronicznej .................................................................................. 199
Konfiguracja systemu ............................................................................................. 199
Tworzenie formularza ............................................................................................ 200
Skrypt wysyajcy wiadomo ............................................................................... 201
Formatowanie wiadomoci za pomoc HTML ...................................................... 202
Przesyanie plikw ....................................................................................................... 204
Tworzenie formularza wysyajcego plik ............................................................... 204
Skrypt obsugujcy przesany plik .......................................................................... 206
Podsumowanie ............................................................................................................. 207
Warsztaty ...................................................................................................................... 208
Test ......................................................................................................................... 208
Odpowiedzi ............................................................................................................ 208
wiczenia ............................................................................................................... 208

Rozdzia 11. Cookies i sesje ............................................................................. 209


Wprowadzenie do cookies ............................................................................................ 209
Anatomia cookie .................................................................................................... 210
Tworzenie cookie ......................................................................................................... 211
Usuwanie cookie .................................................................................................... 212
Wprowadzenie do sesji ................................................................................................. 212
Otwieranie sesji ............................................................................................................ 213
Zmienne sesyjne ........................................................................................................... 214
Przekazywanie identyfikatora sesji w adresie ............................................................... 218
Niszczenie sesji i usuwanie zmiennych ........................................................................ 218
Zastosowania sesji ........................................................................................................ 219
Obsuga zarejestrowanych uytkownikw ............................................................. 219
Obsuga ustawie uytkownika .............................................................................. 219
Podsumowanie ............................................................................................................. 220
Pytania i odpowiedzi .................................................................................................... 220
Warsztaty ...................................................................................................................... 220
Test ......................................................................................................................... 220
Odpowiedzi ............................................................................................................ 221
wiczenie ............................................................................................................... 221

PHP, MySQL i Apache dla kadego

Rozdzia 12. Pliki i katalogi .............................................................................. 223


Doczanie plikw za pomoc funkcji include() .......................................................... 223
Zwracanie wartoci z doczonego dokumentu ...................................................... 224
Instrukcja include() wewntrz struktur sterujcych ................................................ 225
Uycie include_once() ........................................................................................... 226
Dyrektywa include_path ........................................................................................ 226
Weryfikacja plikw ...................................................................................................... 227
Sprawdzanie, czy dany plik istnieje, za pomoc funkcji file_exists() .................... 227
Plik czy katalog? .................................................................................................... 228
Sprawdzanie uprawnie pliku ................................................................................ 228
Sprawdzanie rozmiaru pliku za pomoc funkcji filesize() ..................................... 229
Pobieranie informacji o datach zwizanych z plikiem ........................................... 229
Funkcja wywietlajca informacje o pliku ............................................................. 230
Tworzenie i usuwanie plikw ....................................................................................... 231
Otwieranie plikw do zapisu, odczytu i dopisywania ................................................... 232
Odczytywanie danych z pliku ...................................................................................... 233
Odczytywanie wierszy za pomoc funkcji fgets() i feof() ...................................... 233
Odczytywanie okrelonej iloci danych za pomoc funkcji fread() ....................... 234
Odczytywanie kolejnych znakw za pomoc funkcji fgetc() ................................. 236
Zapisywanie i dopisywanie danych do pliku ................................................................ 237
Zapisywanie danych do pliku za pomoc funkcji fwrite() i fputs() ........................ 237
Blokowanie plikw za pomoc funkcji flock() ...................................................... 238
Operacje na katalogach ................................................................................................. 239
Tworzenie katalogw za pomoc funkcji mkdir() .................................................. 239
Usuwanie katalogu za pomoc rmdir() ................................................................... 240
Otwieranie katalogu za pomoc funkcji opendir() ................................................. 240
Odczytywanie zawartoci katalogu za pomoc funkcji readdir() ........................... 240
Podsumowanie ............................................................................................................. 242
Pytania i odpowiedzi .................................................................................................... 242
Warsztaty ...................................................................................................................... 242
Test ......................................................................................................................... 242
Odpowiedzi ............................................................................................................ 243
wiczenia ............................................................................................................... 243

Rozdzia 13. rodowisko serwera ...................................................................... 245


Otwieranie potoku za pomoc funkcji popen() ............................................................. 245
Przekazywanie polece do powoki za pomoc funkcji exec() ..................................... 247
Wykonywanie polece za pomoc funkcji system() lub passthru() .............................. 249
Podsumowanie ............................................................................................................. 250
Pytania i odpowiedzi .................................................................................................... 250
Warsztaty ...................................................................................................................... 251
Test ......................................................................................................................... 251
Odpowiedzi ............................................................................................................ 251

Rozdzia 14. Obrazki ......................................................................................... 253


Proces powstawania obrazka ........................................................................................ 253
Kilka sw o kolorze .............................................................................................. 253
Konieczne zmiany w PHP ............................................................................................ 254
Pobieranie dodatkowych bibliotek ......................................................................... 254
Rysowanie nowego obrazka ......................................................................................... 255
Rysowanie ksztatw i linii .................................................................................... 255
Wypenianie ksztatw kolorem ............................................................................. 257
Rysowanie wykresw ................................................................................................... 258
Modyfikacja istniejcych obrazkw ............................................................................. 262
Tworzenie obrazkw na podstawie danych przesanych przez uytkownika ............... 264
Podsumowanie ............................................................................................................. 268

Spis treci

9
Pytania i odpowiedzi .................................................................................................... 268
Warsztaty ...................................................................................................................... 268
Test ......................................................................................................................... 269
Odpowiedzi ............................................................................................................ 269
wiczenie ............................................................................................................... 269

Cz IV Integracja PHP i MySQL ..............................................271


Rozdzia 15. Tajniki procesu projektowania bazy danych .................................... 273
Rola dobrego projektu bazy danych ............................................................................. 273
Typy relacji midzy tabelami ....................................................................................... 274
Relacje jeden do jednego ....................................................................................... 275
Relacje jeden do wielu ........................................................................................... 275
Relacje wiele do wielu ........................................................................................... 276
Normalizacja ................................................................................................................ 277
Problemy z tabel prost ........................................................................................ 278
Pierwsza posta normalna ...................................................................................... 278
Druga posta normalna .......................................................................................... 279
Trzecia posta normalna ......................................................................................... 280
Postpowanie zgodnie z procesem projektowania ........................................................ 280
Podsumowanie ............................................................................................................. 281
Pytania i odpowiedzi .................................................................................................... 282
Warsztaty ...................................................................................................................... 282
Test ......................................................................................................................... 282
Odpowiedzi ............................................................................................................ 282
wiczenie ............................................................................................................... 282

Rozdzia 16. Podstawowe polecenia SQL .......................................................... 283


Typy danych w MySQL ............................................................................................... 284
Liczbowe typy danych ........................................................................................... 284
Typy czasu i daty ................................................................................................... 285
Typy acuchowe ................................................................................................... 286
Skadnia tworzenia tabel .............................................................................................. 287
Uywanie polecenia INSERT ....................................................................................... 288
Blisze spojrzenie na INSERT ............................................................................... 288
Stosowanie polecenia SELECT .................................................................................... 290
Porzdkowanie wynikw zwracanych przez SELECT ........................................... 291
Ograniczanie wynikw ........................................................................................... 291
Uywanie WHERE w zapytaniach ............................................................................... 292
Stosowanie operatorw w klauzuli WHERE .......................................................... 293
Porwnywanie acuchw za pomoc LIKE .......................................................... 294
Selekcja z kilku tabel .................................................................................................... 294
Uywanie JOIN ...................................................................................................... 296
Modyfikowanie rekordw za pomoc polecenia UPDATE .......................................... 298
Warunkowe instrukcje UPDATE ........................................................................... 300
Stosowanie biecych wartoci kolumn z UPDATE .............................................. 300
Uywanie polecenia REPLACE ................................................................................... 301
Stosowanie polecenia DELETE ................................................................................... 302
Warunkowa instrukcja DELETE ............................................................................ 303
Czsto stosowane funkcje MySQL operujce na cigach tekstowych .......................... 304
Funkcje dugoci i konkatenacji ............................................................................. 304
Funkcje przycinajce i dopeniajce ....................................................................... 306
Funkcje lokalizacji i pozycji ................................................................................... 308
Funkcje operujce na podcigach ........................................................................... 308
Funkcje modyfikujce cigi ................................................................................... 309

10

PHP, MySQL i Apache dla kadego


Korzystanie z funkcji daty i czasu w MySQL .............................................................. 310
Operowanie na dniach ............................................................................................ 311
Operowanie na miesicach i latach ........................................................................ 313
Operowanie na tygodniach ..................................................................................... 314
Operowanie na godzinach, minutach i sekundach .................................................. 315
Formatowanie daty i czasu w MySQL ................................................................... 316
Dziaania arytmetyczne na datach w MySQL ........................................................ 318
Funkcje specjalne i moliwoci w zakresie konwersji ........................................... 320
Podsumowanie ............................................................................................................. 322
Pytania i odpowiedzi .................................................................................................... 323
Warsztaty ...................................................................................................................... 324
Test ......................................................................................................................... 324
Odpowiedzi ............................................................................................................ 325
wiczenie ............................................................................................................... 325

Rozdzia 17. Interakcja z MySQL z poziomu PHP ................................................ 327


czenie si z MySQL poprzez PHP ............................................................................ 327
Uywanie mysql_connect() .................................................................................... 328
Wykonywanie zapyta ........................................................................................... 329
Odbieranie komunikatw o bdach ....................................................................... 330
Operowanie na danych z bazy MySQL ........................................................................ 331
Wstawianie danych z poziomu PHP ...................................................................... 331
Pobieranie danych z bazy w PHP ........................................................................... 335
Pozostae funkcje MySQL w PHP ......................................................................... 336
Podsumowanie ............................................................................................................. 337
Warsztaty ...................................................................................................................... 337
Test ......................................................................................................................... 337
Odpowiedzi ............................................................................................................ 337

Cz V

Proste projekty ...........................................................339

Rozdzia 18. Zarzdzanie prost list mailingow .............................................. 341


Opracowywanie mechanizmu subskrypcji ................................................................... 341
Tworzenie tabeli subskrybentw ............................................................................ 342
Tworzenie formularza subskrypcji ......................................................................... 342
Budowa mechanizmu mailingu .................................................................................... 348
Podsumowanie ............................................................................................................. 351
Pytania i odpowiedzi .................................................................................................... 352
Warsztaty ...................................................................................................................... 352
Test ......................................................................................................................... 352
Odpowiedzi ............................................................................................................ 352

Rozdzia 19. Tworzenie internetowej ksiki adresowej ...................................... 353


Planowanie i tworzenie tabel w bazie danych .............................................................. 353
Tworzenie menu ........................................................................................................... 356
Tworzenie mechanizmu dodawania rekordw ............................................................. 356
Przegldanie rekordw ................................................................................................. 361
Tworzenie mechanizmu usuwania rekordw ................................................................ 367
Uzupenianie istniejcych rekordw ............................................................................. 369
Podsumowanie ............................................................................................................. 374
Warsztaty ...................................................................................................................... 375
Test ......................................................................................................................... 375
Odpowiedzi ............................................................................................................ 375
wiczenia ............................................................................................................... 375

Spis treci

11

Rozdzia 20. Tworzenie prostego forum dyskusyjnego ........................................ 377


Projektowanie tabel w bazie danych ............................................................................. 377
Tworzenie formularzy wprowadzania danych i skryptw ............................................ 378
Wywietlanie listy tematw .......................................................................................... 381
Wywietlanie postw w temacie .................................................................................. 385
Dodawanie postu w wybranym temacie ....................................................................... 388
Podsumowanie ............................................................................................................. 391
Pytania i odpowiedzi .................................................................................................... 392
Warsztaty ...................................................................................................................... 392
Test ......................................................................................................................... 392
Odpowiedzi ............................................................................................................ 392
wiczenie ............................................................................................................... 393

Rozdzia 21. Tworzenie witryny sklepu internetowego ........................................ 395


Planowanie i tworzenie tabel w bazie danych .............................................................. 395
Wstawianie rekordw do tabeli sklep_kategorie .................................................... 397
Wstawianie rekordw do tabeli sklep_artykuly ..................................................... 397
Wstawianie rekordw do tabeli sklep_art_rozmiar ................................................ 398
Wstawianie rekordw do tabeli sklep_art_kolor .................................................... 399
Wywietlanie kategorii artykuw ................................................................................ 399
Wywietlanie artykuw ............................................................................................... 402
Podsumowanie ............................................................................................................. 405
Warsztaty ...................................................................................................................... 405
Test ......................................................................................................................... 405
Odpowiedzi ............................................................................................................ 406

Rozdzia 22. Tworzenie mechanizmu koszyka z zakupami ................................... 407


Planowanie i tworzenie tabel ........................................................................................ 407
Integracja koszyka z witryn sklepow ........................................................................ 409
Dodawanie artykuw do koszyka .......................................................................... 412
Przegldanie zawartoci koszyka ........................................................................... 413
Usuwanie artykuw z koszyka .............................................................................. 416
Sposoby dokonywania patnoci i sekwencja kasowa .................................................. 416
Tworzenie formularza kasowego ........................................................................... 417
Realizowanie czynnoci kasowych ........................................................................ 417
Podsumowanie ............................................................................................................. 418
Warsztaty ...................................................................................................................... 418
Test ......................................................................................................................... 419
Odpowiedzi ............................................................................................................ 419

Rozdzia 23. Tworzenie prostego kalendarza ...................................................... 421


Tworzenie prostego kalendarza wywietlanego na ekranie .......................................... 421
Sprawdzenie danych przesanych przez uytkownika ............................................ 422
Tworzenie formularza HTML ................................................................................ 423
Tworzenie tabeli kalendarza ................................................................................... 425
Dodawanie terminw do kalendarza ...................................................................... 428
Tworzenie biblioteki kalendarza .................................................................................. 435
Podsumowanie ............................................................................................................. 440
Pytania i odpowiedzi .................................................................................................... 441
Warsztaty ...................................................................................................................... 441
Test ......................................................................................................................... 441
Odpowiedzi ............................................................................................................ 441
wiczenie ............................................................................................................... 441

12

PHP, MySQL i Apache dla kadego

Rozdzia 24. Ograniczanie dostpu do aplikacji ................................................. 443


Istota uwierzytelniania ................................................................................................. 443
Uwierzytelnianie klienta ........................................................................................ 444
Moliwoci funkcjonalne moduu uwierzytelniajcego serwera Apache ..................... 445
Uwierzytelnianie bazujce na plikach .................................................................... 446
Kontrola dostpu bazujca na pliku bazy danych ................................................... 448
Apache jako narzdzie kontroli dostpu ........................................................................ 449
Wprowadzanie regu dostpu ................................................................................. 449
Interpretacja regu dostpu ..................................................................................... 451
Wizane zastosowanie metod kontroli dostpu ............................................................ 452
Ograniczenie dostpu na podstawie metod HTTP ........................................................ 453
Ograniczenie dostpu na podstawie wartoci cookies .................................................. 454
Tworzenie tabeli uprawnionych uytkownikw ..................................................... 454
Tworzenie formularza logowania i skryptu ............................................................ 455
Sprawdzanie cookie uwierzytelniajcego ............................................................... 458
Podsumowanie ............................................................................................................. 459
Pytania i odpowiedzi .................................................................................................... 459
Warsztaty ...................................................................................................................... 460
Test ......................................................................................................................... 460
Odpowiedzi ............................................................................................................ 460
wiczenie ............................................................................................................... 460

Rozdzia 25. Monitorowanie i prowadzenie dziennikw aktywnoci serwera ........ 461


Standardowe odnotowywanie dostpu do serwera ....................................................... 461
Ustalanie treci dziennikw ................................................................................... 462
Odnotowywanie dostpw w plikach ..................................................................... 465
Odnotowywanie dostpw w programie ................................................................ 466
Standardowy tryb odnotowywania bdw serwera Apache ........................................ 467
Odnotowywanie bdw w pliku ............................................................................ 467
Odnotowywanie bdw w programie .................................................................... 467
Demon syslog jako argument ................................................................................. 467
Dyrektywa LogLevel ............................................................................................. 468
Zarzdzanie dziennikami serwera Apache .................................................................... 468
Ustalanie nazw hostw ........................................................................................... 469
Rotacja dziennikw ................................................................................................ 469
czenie i podzia dziennikw ............................................................................... 470
Analiza dziennikw ................................................................................................ 470
Monitorowanie dziennikw bdw ....................................................................... 470
Odnotowywanie informacji w bazie danych ................................................................. 471
Tworzenie tabeli w bazie danych ........................................................................... 471
Tworzenie skryptu PHP odnotowujcego dane ...................................................... 471
Tworzenie przykadowych raportw ...................................................................... 472
Podsumowanie ............................................................................................................. 475
Pytania i odpowiedzi .................................................................................................... 475
Warsztaty ...................................................................................................................... 475
Test ......................................................................................................................... 475
Odpowiedzi ............................................................................................................ 475

Rozdzia 26. Lokalizacja aplikacji ...................................................................... 477


Internacjonalizacja i lokalizacja ................................................................................... 477
Zestawy znakw ........................................................................................................... 478
Modyfikacje rodowiska .............................................................................................. 479
Zmiany w konfiguracji serwera Apache ................................................................. 479
Zmiany w konfiguracji PHP ................................................................................... 480
Zmiany w konfiguracji MySQL ............................................................................. 480
Tworzenie zlokalizowanej struktury strony .................................................................. 481
Podsumowanie ............................................................................................................. 486

Spis treci

13
Pytania i odpowiedzi .................................................................................................... 487
Warsztaty ...................................................................................................................... 487
Test ......................................................................................................................... 487
Odpowiedzi ............................................................................................................ 487

Cz VI Administrowanie i dostrajanie ......................................489


Rozdzia 27. Poprawianie wydajnoci i wirtualny hosting na serwerze Apache .... 491
Kwestie skalowalnoci ................................................................................................. 492
Ograniczenia systemu operacyjnego ...................................................................... 492
Ustawienia serwera Apache zwizane z wydajnoci ............................................ 494
Testowanie serwera pod obcieniem przy uyciu ApacheBench ................................ 495
Aktywne dostrajanie wydajnoci .................................................................................. 497
Odwzorowywanie plikw w pamici ..................................................................... 497
Rozkad obcienia ................................................................................................ 498
Buforowanie ........................................................................................................... 498
Redukcja iloci transmitowanych danych .............................................................. 498
Ustawienia sieci ..................................................................................................... 499
Zapobieganie naduyciom ............................................................................................ 499
Roboty .................................................................................................................... 499
Implementacja wirtualnego hostingu ............................................................................ 500
Wirtualny hosting bazujcy na adresach IP ............................................................ 501
Wirtualny hosting bazujcy na nazwach ................................................................ 501
Masowy hosting wirtualny ..................................................................................... 503
Podsumowanie ............................................................................................................. 504
Pytania i odpowiedzi .................................................................................................... 505
Warsztaty ...................................................................................................................... 506
Test ......................................................................................................................... 506
Odpowiedzi ............................................................................................................ 506

Rozdzia 28. Bezpieczny serwer WWW .............................................................. 507


Potrzeba bezpieczestwa .............................................................................................. 507
Protok SSL ................................................................................................................ 508
Rozwizanie kwestii poufnoci .............................................................................. 508
Rozwizanie kwestii nienaruszalnoci ................................................................... 510
Rozwizanie kwestii uwierzytelniania ................................................................... 510
Uzyskiwanie i instalacja narzdzi SSL ......................................................................... 513
OpenSSL ................................................................................................................ 513
Modu mod_ssl serwera Apache ............................................................................ 514
Zarzdzanie certyfikatami ............................................................................................ 515
Tworzenie pary kluczy ........................................................................................... 515
Tworzenie proby o podpisanie certyfikatu ............................................................ 517
Tworzenie certyfikatu podpisanego przez nas samych ........................................... 518
Konfiguracja SSL ......................................................................................................... 518
Uruchamianie serwera ............................................................................................ 519
Podsumowanie ............................................................................................................. 519
Pytania i odpowiedzi .................................................................................................... 519
Warsztaty ...................................................................................................................... 520
Test ......................................................................................................................... 520
Odpowiedzi ............................................................................................................ 520

Rozdzia 29. Optymalizacja i dostrajanie MySQL ................................................ 521


Tworzenie zoptymalizowanej platformy ...................................................................... 521
Stosowanie funkcji benchmark() ............................................................................ 522
Opcje inicjalizacyjne MySQL ...................................................................................... 523
Kluczowe parametry startowe ................................................................................ 524

14

PHP, MySQL i Apache dla kadego


Optymalizacja struktury tabel ....................................................................................... 525
Optymalizacja zapyta ................................................................................................. 525
Korzystanie z polecenia FLUSH .................................................................................. 527
Korzystanie z polecenia SHOW ................................................................................... 528
Pobieranie informacji o bazach danych i tabelach ................................................. 529
Pobieranie informacji o strukturze tabel ................................................................. 530
Pobieranie statusu systemu ..................................................................................... 531
Podsumowanie ............................................................................................................. 533
Pytania i odpowiedzi .................................................................................................... 534
Warsztaty ...................................................................................................................... 534
Test ......................................................................................................................... 534
Odpowiedzi ............................................................................................................ 535
wiczenia ............................................................................................................... 535

Rozdzia 30. Aktualizacja oprogramowania ........................................................ 537


Trzymanie rki na pulsie .............................................................................................. 537
Kiedy aktualizowa? .............................................................................................. 538
Aktualizacja MySQL .................................................................................................... 539
Aktualizacja Apache ..................................................................................................... 539
Modyfikowanie Apache bez dokonywania aktualizacji ......................................... 540
Aktualizacja PHP ......................................................................................................... 541
Podsumowanie ............................................................................................................. 541
Warsztaty ...................................................................................................................... 541
Test ......................................................................................................................... 542
Odpowiedzi ............................................................................................................ 542

Cz VII Spojrzenie w przyszo ...............................................543


Rozdzia 31. Moliwoci funkcjonalne i wsteczna kompatybilno PHP 5.0 ................. 545
Co byo ze w PHP 4? ................................................................................................... 545
Nowy model obiektowy ............................................................................................... 546
Pozostae nowe moliwoci .......................................................................................... 548
SQLite .................................................................................................................... 548
Obsuga XML-a ..................................................................................................... 549
A wic kiedy instalowa PHP 5? .................................................................................. 549
Kompatybilno wsteczna ...................................................................................... 549
Podsumowanie ............................................................................................................. 550
Pytania i odpowiedzi .................................................................................................... 550

Rozdzia 32. Moliwoci funkcjonalne i wsteczna kompatybilno MySQL 4.1 ............. 551
Korzystanie z podzapyta ............................................................................................. 551
Przykad systemu ledzcego czas pracy z zastosowaniem podzapyta ................. 552
Ulepszenia dotyczce internacjonalizacji ..................................................................... 555
Inne nowe moliwoci funkcjonalne ............................................................................ 555
Spojrzenie w przyszo MySQL 5.0 ...................................................................... 556
Podsumowanie ............................................................................................................. 556
Pytania i odpowiedzi .................................................................................................... 557
Warsztaty ...................................................................................................................... 557
Test ......................................................................................................................... 557
Odpowiedzi ............................................................................................................ 557

Dodatki ......................................................................................559
Skorowidz ..................................................................................... 561

Rozdzia 5.

Podstawowe elementy
jzyka PHP
W tym rozdziale zaczniemy poznawa jzyk skryptowy PHP. Czytelnicy niebdcy
programistami z pocztku mog poczu si nieco przytoczeni liczb informacji, nie
ma jednak powodw do obaw, zawsze mona wrci do tego rozdziau pniej. Lepiej
skupi si na zrozumieniu gwnych poj, ni stara si dokadnie zapamita omwione konstrukcje. Na pewno pojawi si one w tej ksice jeszcze nie raz, wic bdzie
jeszcze szansa ich przyswojenia.
Dowiadczeni programici powinni przynajmniej przejrze ten rozdzia, gdy omawiamy
w nim kilka cech szczeglnych dla PHP, dotyczcych zmiennych globalnych, typw
danych i ich konwersji.
W tym rozdziale omwimy:
 Zmienne czym s, dlaczego s potrzebne i jak z nich korzysta
 Definiowanie zmiennych i odczytywanie ich wartoci
 Typy danych
 Niektre czsto uywane operatory
 Tworzenie wyrae za pomoc operatorw
 Definiowanie staych i korzystanie z nich

Zmienne
Zmienne to zdefiniowane przez programist pojemniki, ktre mog przechowywa
jak warto: liczb, cig znakw, obiekt, tablic czy warto logiczn. Zmienna to
podstawowe pojcie w programowaniu. Gdyby nie istniay zmienne, wszystkie wartoci

Cz II Struktura jzyka PHP

90

naleaoby zapisa bezporednio w skrypcie. Dodanie do siebie dwch liczb i wywietlenie rezultatu to ju skrypt, rozwizujcy jaki problem:


Jednak ten fragment kodu jest przydatny tylko dla tych, ktrzy chc zna sum liczb 2
i 4. Mona oczywicie napisa kolejny skrypt, wywietlajcy sum liczb, powiedzmy,
3 i 5. Oczywicie takie podejcie do programowania staje si absurdalne, wtedy wanie przychodz z pomoc zmienne.
Dziki zmiennym moemy tworzy szablony operacji (takich jak dodawanie dwch
liczb) bez zwracania uwagi na to, na jakich dokadnie wartociach operujemy. Warto zostanie przypisana zmiennej w trakcie dziaania skryptu, by moe na podstawie
danych dostarczonych przez uytkownika, pobranych z bazy danych, czy w zalenoci od wczeniejszego przebiegu skryptu. Innymi sowy, zmiennych naley uywa
wszdzie tam, gdzie dane mog ulec zmianie.
Zmienna skada si z wybranej przez programist nazwy, poprzedzonej znakiem dolara (). Nazwy zmiennych mog skada si z liter, cyfr i znaku podkrelenia (), nie
mog zawiera spacji. Nazwa musi zaczyna si liter lub znakiem podkrelenia. Oto
kilka prawidowo nazwanych zmiennych:
 

  
 
 

Nazwy zmiennych powinny co mwi o ich zawartoci, dobrze te, gdy ich nazewnictwo jest spjne. Na przykad, jeli skrypt przechowuje informacje o nazwie uytkownika i hale, nie naley umieszcza nazwy w zmiennej , a hasa w zmiennej , te
nazwy zmiennych niewiele mwi o ich zawartoci. Modyfikujc skrypt kilka tygodni
pniej, moesz pomyle, e  oznacza numer, nie nazw, a  oznacza histori, nie haso. A jak wsppracownik ma si domyli, co oznaczaj nazwy  i ?
Zmienne mona nazywa zgodnie z dowoln konwencj, jeli tylko nazwy bd opisowe i zgodne z jak regu, ktr mog stosowa inni.

rednik (), nazywany take terminatorem instrukcji, suy do zakoczenia instrukcji


PHP. redniki w poprzednim fragmencie kodu nie byy czci nazwy zmiennej, stanowiy koniec opcjonalnej instrukcji, informujcej PHP o tym, e zmienna jest gotowa do
dziaania. Aby zadeklarowa zmienn, wystarczy w skrypcie umieci odwoanie do niej.
Na og w momencie deklaracji zmiennej przypisywana jest jaka warto pocztkowa:
 
 

Powyej zadeklarowalimy dwie zmienne i przypisalimy im warto za pomoc operatora przypisania (). Przypisywanie wartoci zmiennym omawiamy bardziej szczegowo w podrozdziale Operatory i wyraenia, w dalszej czci tego rozdziau. Po
przypisaniu, zmienne mona traktowa w ten sam sposb, jak warto, ktr reprezentuj. Innymi sowy, instrukcja
 

Rozdzia 5. Podstawowe elementy jzyka PHP

91

jest rwnoznaczna z instrukcj




tak dugo, jak dugo  ma warto


.

Zmienne globalne i superglobalne


Oprcz zasad nazywania zmiennych istniej take zasady okrelajce dostpno zmiennych. Przede wszystkim warto kadej zmiennej jest widoczna tylko wewntrz funkcji lub skryptu, w ktrym si znajduje. Na przykad, jeli w pliku skryptA.php zmiennej   zostaa przypisana warto , a w pliku skryptB.php take korzystamy ze
zmiennej   , moemy bez obaw przypisa jej warto , nie bdzie to miao
wpywu na skryptA.php. Zmienna   jest lokalna w obrbie kadego skryptu, a jej
wartoci w rnych skryptach s od siebie niezalene.
Zmienn   mona te zdefiniowa jako globaln. Jeli zmienna   zostanie
zdefiniowana jako globalna zarwno w pliku skryptA.php, jak i skryptB.php, a te dwa
skrypty bd w jaki sposb powizane (na przykad jeden z nich wywouje lub docza
drugi), zmienna bdzie miaa jedn wspln warto. Zmienne globalne omwimy
bardziej szczegowo w rozdziale 6., Sterowanie przepywem w PHP.
Oprcz zdefiniowanych przez programist zmiennych globalnych, PHP zawiera kilka
predefiniowanych zmiennych, nazywanych superglobalnymi. S one dostpne we wszystkich skryptach. Kada ze zmiennych superglobalnych to tak naprawd tablica:
  zawiera zmienne przesane do skryptu za pomoc metody GET.
  zawiera zmienne przesane do skryptu za pomoc metody POST.
  zawiera zmienne przesane do skryptu za pomoc cookies.
  zawiera zmienne przesane do skryptu poprzez wysanie pliku.
  zawiera informacje takie jak wysane nagwki, ciek do pliku

czy adres skryptu.


  zawiera wartoci zmiennych rodowiskowych serwera.
  zawiera zmienne przesane do skryptu przez uytkownika.
  zawiera zmienne zarejestrowane w aktualnej sesji.

W treci ksiki bdziemy korzysta ze zmiennych superglobalnych wszdzie tam, gdzie


to tylko moliwe. Korzystanie ze zmiennych superglobalnych poprawia bezpieczestwo aplikacji, zmniejszajc prawdopodobiestwo wstawienia obcych danych do skryptu.
Piszc skrypty tak, aby akceptoway tylko dane, ktrych si spodziewamy, przekazane w odpowiedni sposb (na przykad za pomoc formularza wysyanego metod
POST, czy sesji), moemy unikn wielu problemw.

Cz II Struktura jzyka PHP

92

Typy danych
Rne typy danych zajmuj rn ilo pamici, mog te by traktowane w rny
sposb w trakcie wykonywania skryptu. Dlatego wanie niektre jzyki zobowizuj
programist do wczeniejszego okrelenia typu danych, ktre zmienna moe przechowywa. Jednak PHP jest jzykiem z lunym typowaniem, a wic typ zmiennej jest
okrelany w momencie przypisywania jej wartoci.
Takie automatyczne typowanie ma swoje wady i zalety. Z jednej strony daje du elastyczno w uyciu zmiennych zmienna przechowujca cig znakw w dalszej czci skryptu moe zawiera liczb lub dowolny inny typ danych. Z drugiej strony, moe to prowadzi do problemw w przypadku wikszych skryptw, gdy spodziewamy
si konkretnego typu zmiennej, a zmienna zawiera dane innego typu. Na przykad
zamy, e napisalimy kod operujcy na tablicy. Jeli odpowiednia zmienna zamiast
tablicy zawiera warto liczbow, kada operacja tablicowa na tej zmiennej spowoduje bd.
W tabeli 5.1 opisujemy podstawowe typy danych, dostpne w PHP.
Tabela 5.1. Podstawowe typy danych
Typ

Przykad

Opis

"# 

Warto logiczna, okrelona jedn ze specjalnych staych:


"#  (prawda) albo $  (fasz).

%" #

Liczba cakowita.

& ! " lub '! ( 

)

Liczba zmiennopozycyjna.

*"#

+" +

Cig znakw.

!!  

,("

Obiekt, egzemplarz klasy.

-## 

Tablica, uporzdkowany zbir kluczy i wartoci.

.! #

Odnonik do zewntrznego zasobu (na przykad bazy danych).

/011

Niezdefiniowana zmienna.

Zmienne typu  !" s czsto zwracane przez funkcje odpowiadajce za wspprac


z zewntrznymi aplikacjami lub plikami. Na przykad w rozdziale 17., Interakcja z MySQL z poziomu PHP wspominamy o identyfikatorze zasobu MySQL. Typ 
jest zarezerwowany dla zmiennych, ktre zostay zadeklarowane, ale nie przypisano
im adnej wartoci.
Aby sprawdzi typ zmiennej, mona uy wbudowanej funkcji # $$%& '(. Zwrci ona
cig znakw reprezentujcy typ zmiennej, umieszczonej w nawiasie funkcji. Na listingu 5.1 przypisujemy zmiennej wartoci rnych typw, a nastpnie wywietlamy
rezultat funkcji # $$%& '(. Komentarze mwi, jakiego typu jest zmienna w danym
momencie.

Rozdzia 5. Podstawowe elementy jzyka PHP

93

Wywoywanie funkcji omawiamy bardziej szczegowo w rozdziale 7., Funkcje.


Listing 5.1. Sprawdzanie typu zmiennej
2345
2""66deklaracja bez przypisania wartoci
2 """"66null
2+3(#7+
2""
82 """"66integer
92+3(#7+
2""+:;+
<2 """"66string
=2+3(#7+
2"")=
2 """"66double
2+3(#7+
2"""# 
2 """"66boolean
82+3(#7+
92""+ (>?!+@+! # A +@+ # ? +
2 """"66array
<2+3(#7+
=247

Powyszy kod naley umieci w pliku gettype.php, w katalogu nadrzdnym serwera


WWW. Po otwarciu skryptu w przegldarce internetowej, powinien pojawi si nastpujcy rezultat:
/011
" #
"#

! ( 
(!!  
## 

Deklarujc zmienn $ $ w linii 2., nie przypisalimy jej adnej wartoci, a wic pierwsze wywoanie funkcji # $$%& '( w linii 3. zwraca warto . Nastpnie, za pomoc
operatora przypisania (), nadajemy zmiennej kolejne wartoci, wywietlajc rezultat
funkcji # $$%& '(. W linii 5. zmiennej zostaa przypisana warto cakowita, mwic
krtko, liczba bez wartoci dziesitnej1. W linii 8. zmiennej przypisujemy cig znakw, ktry zawsze powinien by otoczony pojedynczymi lub podwjnymi znakami
cudzysowu () lub *). Warto +!,- , przypisana zmiennej $ $ w linii 11., to liczba zmiennopozycyjna (zawierajca kropk dziesitn). Warto logiczna, przypisana
zmiennej $ $ w linii 14., moe przyjmowa jedn z dwch moliwych wartoci:
$ lub .- . W linii 17. do utworzenia tablicy wykorzystano funkcj '(, ktr omwimy dokadniej w rozdziale 8., Tablice i obiekty. Przykadowa tablica zawiera trzy elementy, a funkcja # $$%& '( zgodnie z prawd zwraca warto array.
1

W PHP, podobnie jak w jzyku angielskim, cz cakowita oddzielana jest od czci dziesitnej
kropk, nie przecinkiem przyp. red.

Cz II Struktura jzyka PHP

94

Zmiana typu za pomoc settype()


Jzyk PHP posiada funkcj $$%& '(, umoliwiajc zmian typu zmiennej. Zmienn
i nazw nowego typu naley przekaza jako argumenty funkcji $$%& '( (w nawiasie,
oddzielone przecinkiem), jak w poniszym przykadzie:
""@



Kod na listingu 5.2 konwertuje warto /0 1 (typu .-!$) do kadego z czterech omwionych wczeniej typw danych.
Listing 5.2. Zmiana typu zmiennej za pomoc settype()
2345
2!?# ! )
2 ""!?# ! 66double
2+  #"!B;!?# ! 3(#7+663.14
2""!?# ! @C"# C
82 ""!?# ! 66string
92+  #"!B;!?# ! 3(#7+663.14
2""!?# ! @C" #C
<2 ""!?# ! 66integer
=2+  #"!B;!?# ! 3(#7+663
2""!?# ! @C
! ( C
2 ""!?# ! 66double
2+  #"!B;!?# ! 3(#7+663
2""!?# ! @C(!! C
2 ""!?# ! 66boolean
82+  #"!B;!?# ! 3(#7+661
9247

Zgodnie z podrcznikiem PHP, warto double (a nie float) zostanie zwrcona nawet wtedy, gdy zmienna jest typu .-!$.

Za kadym razem za pomoc funkcji # $$%& '( sprawdzamy nowy typ zmiennej, a nastpnie wywietlamy jej warto. Gdy cig */0 1* zostanie zamieniony w linii 8. na
liczb cakowit, czci dziesitnej nie mona ju odzyska. To wanie dlatego zmienna  !2 -!, gdy zamienimy j z powrotem na +!,- w linii 11., ma warto /.
Wreszcie w linii 14. konwertujemy zmienn na warto logiczn. Warto $ jest
reprezentowana przez , a warto .- przez pusty cig znakw. A wic w linii 16.
zostanie wywietlona warto .
Powyszy kod naley umieci w pliku settype.php, w katalogu nadrzdnym serwera
WWW. Po otwarciu skryptu w przegldarce internetowej, powinien pojawi si nastpujcy rezultat:

! (   #"!B;)
"#   #"!B;)
" #  #"!B;

! (   #"!B;
(!!    #"!B;

Rozdzia 5. Podstawowe elementy jzyka PHP

95

Zmiana typu poprzez rzutowanie


Zmiana typu zmiennej za pomoc funkcji # $$%& '( rni si od zmiany typu poprzez
rzutowanie przede wszystkim tym, e w tym drugim przypadku tworzona jest kopia
zmiennej, a orygina pozostaje bez zmian. Aby zmieni typ za pomoc rzutowania,
naley poda jego nazw, zawart w nawiasie, przed zmienn, ktrej dotyczy rzutowanie. Na przykad ponisza instrukcja tworzy kopi zmiennej !%# - odpowiedniego typu ( $ # ) i przypisuje jej warto do zmiennej !3. Zmienna !%# -
bdzie wci dostpna, a jej typ nie ulegnie zmianie:
! " #!#   

Kod na listingu 5.3 zmienia typ za pomoc rzutowania.


Listing 5.3. Rzutowanie zmiennej
2345
2!?# ! )
25 
! ( !?# ! 
2 ""5 66double
2+  #"!B;5 3(#7+663.14
825 "# !?# ! 
92 ""5 66string
2+  #"!B;5 3(#7+663.14
<25 " #!?# ! 
=2 ""5 66integer
2+  #"!B;5 3(#7+663
25 
! ( !?# ! 
2 ""5 66double
2+  #"!B;5 3(#7+663.14
25 (!!  !?# ! 
82 ""5 66boolean
92+  #"!B;5 3(#7+661
2+35#7+
<2+"!D"?!2+
=2 ""!?# ! 66double
247

Typ zmiennej  !2 -! pozostaje bez zmian (+!,- ) w trakcie dziaania skryptu,
czego dowodzi funkcja # $$%& '( w linii 20., wywietlajca typ zmiennej.
W praktyce w trakcie rzutowania zmiennej  !2 -! tworzona jest jej kopia,
skonwertowana na odpowiedni typ, ktra nastpnie zostaje przypisana zmiennej
"3 -. Rzutowania wystpuj w liniach 3., 6., 9., 12. i 15. Operujemy jedynie na kopii
zmiennej  !2 -!, a wic pocztkowa warto zmiennej pozostaje bez zmian
(w przeciwiestwie do kodu na listingu 5.2, gdzie w linii 8. zmienna zostaa skonwertowana na typ $ # ).
Powyszy kod naley umieci w pliku testtype.php, w katalogu nadrzdnym serwera
WWW. Po otwarciu skryptu w przegldarce internetowej, powinien pojawi si nastpujcy rezultat:

Cz II Struktura jzyka PHP

96

! (   #"!B;)
"#   #"!B;)
" #  #"!B;

! (   #"!B;)
(!!    #"!B;
"!D"?!2
! ( 

Teraz, gdy ju zaprezentowalimy dwa sposoby zmiany typu zmiennej, zastanwmy


si, w jakich sytuacjach moe to by uyteczne. Na pewno nie bdziemy korzysta z tej
moliwoci zbyt czsto, PHP automatycznie rzutuje zmienne w zalenoci od kontekstu, w jakim zostan uyte. Jednak takie automatyczne rzutowanie jest tymczasowe,
a czasem zachodzi potrzeba permanentnej zmiany typu zmiennej.
Na przykad liczby, wpisane przez uytkownika w formularzu HTML, zostan przekazane do skryptu jako cigi znakw. Przy prbie dodania do siebie dwch takich
cigw, PHP w celu przeprowadzenia dodawania skonwertuje je na liczby. A wic
+=++=+

w rezultacie da 45.
Oglnym terminem liczba okrelamy zarwno liczby cakowite, jak i zmiennopozycyjne. A wic jeli uytkownik w formularzu poda wartoci zmiennopozycyjne, reprezentowane przez cigi 3.14cm i 4.12cm, rezultatem dodawania bdzie 7.26.

Podczas rzutowania cigu znakw na liczb cakowit lub zmiennopozycyjn, PHP


zignoruje wszystkie znaki nienumeryczne. Fragment od pierwszego znaku nienumerycznego do koca cigu zostanie obcity. A wic cig 30cm zostanie zamieniony
na 30, jednak cig 6m2cm bdzie mia warto liczbow 6, caa reszta zostanie
obcita.
Czasem warto samodzielnie oczyci dane przesane przez uytkownika przed ich
uyciem w skrypcie. Zamy, e uytkownik mia przesa liczb. Moemy zasymulowa tak sytuacj, nadajc warto odpowiedniej zmiennej:
""+=+

Jak wida, uytkownik doda do liczby jednostk zamiast wpisa 30, poda
warto 30cm. Aby upewni si, e warto zmiennej bdzie cakowita, mona dokona rzutowania:
!""" #""
+E
>?! #!?!B;!""""#F)+

Oto rezultat dziaania powyszego kodu:


E
>?! #!?!B;=""#F)

Gdyby nie zastosowano rzutowania i wywietlono pocztkow warto zmiennej $ $,


rezultat byby inny:
E
>?! #!?!B;=""#F)

Trzeba przyzna, e to zdanie wyglda troch dziwnie.

Rozdzia 5. Podstawowe elementy jzyka PHP

97

Po co sprawdza typ?
Kiedy znajomo typu zmiennej moe okaza si przydatna? Zdarzaj si sytuacje,
gdy operujemy na danych pobranych z jakiego obcego rda. W rozdziale 7. omwimy, jak korzysta z funkcji. Dane s czsto przekazywane pomidzy funkcjami,
ktre mog odbiera informacje za pomoc argumentw. Aby zapewni poprawne
dziaanie funkcji, dobrze wczeniej sprawdzi, czy dane do niej przekazane s odpowiedniego typu. Na przykad funkcja spodziewajca si argumentu typu resource
nie bdzie dobrze dziaaa, gdy otrzyma zamiast tego cig znakw.

Operatory i wyraenia
Pokazalimy, jak przypisywa zmiennym wartoci, a take jak sprawdza i zmienia
typ zmiennych. Jednak bez moliwoci przeprowadzania operacji na danych, aden
jzyk programowania nie byby zbyt uyteczny. Operatory to symbole, za pomoc
ktrych mona manipulowa danymi przechowywanymi w zmiennych. Dziki temu
na podstawie istniejcych danych mona otrzyma now warto, sprawdzi poprawno danej i tak dalej. Warto, na ktrej dziaa operator nazywamy operandem.
Operator to symbol (lub kilka symboli), ktry uyty wraz z pewnymi wartociami tworzy
now warto.
Operand to warto wykorzystywana w operatorze. Operator posiada na og co najmniej dwa operandy.

W tym prostym przykadzie operator, wraz z dwoma operandami, tworzy now warto:


Liczby cakowite 1 i 6 to operandy. Zastosowany na nich operator dodawania (7)


zwraca warto cakowit 8. Operator na og znajduje si pomidzy dwoma operandami, cho od tej zasady jest kilka wyjtkw.
Operator wraz z operandami tworzy wyraenie, cho wyraenie nie musi zawiera operatora. Tak naprawd w PHP wyraenie jest zdefiniowane jako wszystko to, co moe
zosta uyte jako warto. A wic wyraeniami s stae cakowite np. 961, zmienne
np.  , i wywoania funkcji np. # $$%& '(. Na przykad wyraenie '1:7:6(
w rzeczywistoci skada si z dwch wyrae skadowych (1 i 6) i operatora (7). Gdy wyraenie tworzy now warto, mwimy, e zwraca t warto. A wic wyraenie mona
take traktowa jako warto. W naszym przykadzie wyraenie '1:7:6( zwraca 8.
Wyraenie to dowolna kombinacja wywoa funkcji, wartoci i operatorw, zwracajca warto. atwo zapamita, e jeli pewnego fragmentu mona uy jako wartoci,
to jest to wyraenie.

Po wstpie teoretycznym omwimy najpopularniejsze operatory wystpujce w jzyku PHP.

Cz II Struktura jzyka PHP

98

Operator przypisania
Operator przypisania, reprezentowany przez symbol , by ju przez nas wykorzystywany podczas deklaracji zmiennych. Odczytuje on warto operandu po prawej stronie
operatora i przypisuje do zmiennej po lewej stronie:
+
+

Po wykonaniu tego fragmentu zmienna   bdzie zawieraa warto *+*. Taka


konstrukcja to take wyraenie, cho z pozoru moe si wydawa, e operator po prostu
modyfikuje zmienn, nic nie zwracajc. W rzeczywistoci takie wyraenie zawsze
zwraca kopi prawego operandu. A wic
+
+

przypisze zmiennej   warto *+*, ale take wywietli cig znakw *+*.

Operatory arytmetyczne
Operatory arytmetyczne robi dokadnie to, czego mona si spodziewa po ich nazwie przeprowadzaj dziaania arytmetyczne. W tabeli 5.2 podajemy ich list,
wraz z przykadami uycia.
Tabela 5.2. Operatory arytmetyczne
Operator

Nazwa

Przykad

Rezultat

dodawanie

=



odejmowanie

=G

dzielenie

=6

)

mnoenie

=H

=

Operator konkatenacji
Operator konkatenacji oznaczamy pojedyncz kropk (0). Traktujc oba operandy jako
cigi znakw, operator skleja lewy operand z prawym. A wic wyraenie
+" +)+B+

zwrci warto
+" B+

Warto zauway, e oba sowa s oddzielone spacj tylko dlatego, e wystpuje ona
w drugim operandzie ( wiecie zamiast wiecie). Operator konkatenacji po prostu
docza jeden cig do drugiego, nie rozdzielajc ich w aden sposb. A wic prba
poczenia dwch cigw niepoprzedzonych lub zakoczonych spacj, np.
+" +)+B+

da nastpujcy rezultat:
+" B+

Rozdzia 5. Podstawowe elementy jzyka PHP

99

Niezalenie od typw zawartych w operandach, oba s traktowane jako cigi znakw,


a wic rezultat zawsze bdzie cigiem znakw. Operatora konkatenacji w treci ksiki
bardzo czsto uywamy do sklejenia cigu znakw z wartoci jakiego wyraenia:

+#!?!B;2+)6==)+"#F+

Zoony operator przypisania


Istnieje tylko jeden operator przypisania, jednak PHP posiada kilka operatorw zoonych, modyfikujcych warto zmiennej po lewej stronie operatora i zwracajcych
jej now warto. Regu jest, e operatory nie zmieniaj wartoci operandw ta
regua nie dotyczy zoonych operatorw przypisania (i oczywicie standardowego
operatora przypisania). Operatory zoone skadaj si z odpowiedniego symbolu, po
ktrym nastpuje znak rwnoci. S znacznym uatwieniem w sytuacjach, w ktrych
konieczne byoby uycie dwch osobnych operatorw. Na przykad chcc zwikszy
warto zmiennej, ktrej pocztkowa warto to 1, o kolejne 1, moemy napisa:
I
II66$x ma teraz warto 8

Mona te uy zoonego operatora przypisania (7), aby zwikszy warto zmiennej:


I
I66$x ma teraz warto 8

Kady operator arytmetyczny, a take operator konkatenacji, posiada odpowiadajcy


mu operator zoony. W tabeli 5.3 podajemy ich list wraz z przykadami uycia.
Tabela 5.3. Niektre zoone operatory przypisania
Operator

Przykad

Zapis rwnowany



I

II

G

IG

IIG

6

I6

II6

H

IH

IIH

J

IJ

IIJ

)

I)+""+

II)+""+

W kadym z przykadw w tabeli 5.3 warto zmiennej ; zostaje zmodyfikowana na


podstawie wartoci prawego operandu. Od tej pory zmienna ; bdzie zawieraa now
warto. Na przykad:
I
I66$x ma teraz warto 8
I66$x ma teraz warto 12
IG66$x ma teraz warto 9

W dalszej czci ksiki bdziemy czsto stosowali operatory zoone. Zoony operator konkatenacji czsto wystpuje we fragmentach, w ktrych tekst konstruowany
jest dynamicznie. Dobry przykad to zastosowanie ptli do dynamicznego tworzenia
kodu HTML reprezentujcego tabel.

Cz II Struktura jzyka PHP

100

Inkrementacja i dekrementacja
wartoci zmiennej cakowitej
Podczas programowania w PHP czsto zachodzi potrzeba zwikszenia lub zmniejszenia
o jeden wartoci zmiennej cakowitej. Dobrym przykadem jest zliczanie iteracji ptli.
Znamy ju dwa sposoby osignicia tego uycie operatora dodawania
II66warto $x zostaje zwikszona o 1

lub zoonego operatora przypisania


I66warto $x zostaje zwikszona o 1

W kadym z tych przypadkw nowa warto zostaje przypisana do zmiennej ;.


Wyraenia tego typu s bardzo czsto spotykane, dlatego PHP zawiera specjalne operatory, suce do zwikszania i zmniejszania wartoci zmiennej o 1. To operatory
postinkrementacji oraz postdekrementacji, pierwszy z nich skada si z dwch symboli
plus, umieszczonych za nazw zmiennej:
I66warto $x zostaje zwikszona o 1

Powysze wyraenie zwiksza warto zmiennej ; o jeden. Uycie dwch symboli


minus spowoduje zmniejszenie wartoci zmiennej:
IGG66warto $x zostaje zmniejszona o 1

Warto pamita, e operatory postinkrementacji i postdekrementacji najpierw zwracaj


warto operandu, a dopiero potem j modyfikuj (std przedrostek post):
I
I

W takiej sytuacji % przyjmuje warto 6 (3 + 3), a dopiero wtedy zmienna ; zostaje


zwikszona.
W niektrych wyraeniach warunkowych zachodzi potrzeba zmniejszenia (lub zwikszenia) wartoci zmiennej jeszcze przed przeprowadzeniem testu. W tym celu PHP
zapewnia operatory preinkrementacji i predekrementacji. Dziaaj w ten sam sposb,
jak wczeniej omwione operatory, jednak symbole je reprezentujce musz poprzedza zmienn:
I66warto $x zostaje zwikszona o 1
GGI66warto $x zostaje zmniejszona o 1

Gdyby uy tych operatorw w wyraeniu warunkowym, warto zmiennej zostanie


zmniejszona jeszcze przed przeprowadzeniem testu. Na poniszym przykadzie
zmienna ; zostaje zwikszona przed sprawdzeniem, czy jest mniejsza od 1:
I
I366zwraca warto logiczn false

Liczba 1 nie jest mniejsza od 1, a wic wyraenie warunkowe zwraca .- .

Rozdzia 5. Podstawowe elementy jzyka PHP

101

Operatory porwnania
Operatory porwnania sprawdzaj warto operandw, zwracajc warto logiczn
$ , jeli test si powid, a .- w przeciwnym razie. Takie wyraenia s bardzo
przydatne w strukturach sterujcych, takich jak instrukcje  czy  . Omwimy je
w rozdziale 6.
Na przykad, aby sprawdzi, czy warto zmiennej ; jest mniejsza ni 6, mona uy
operatora mniejsze ni:
I3

Jeli ; ma warto /, wyraenie zwrci warto $ . Jeli ; zawiera warto 4, wyraenie zwrci .- .
W tabeli 5.4 prezentujemy dostpne operatory porwnania.
Tabela 5.4. Operatory porwnania
Operator

Nazwa

Zwraca prawd, jeli

Przykad ($x = 4)

Rezultat



rwne

lewa strona jest rwna prawej

I

$ 

K

rne

lewa strona nie jest rwna


prawej

IK

"# 



identyczne

lewa strona jest rwna prawej


i s tego samego typu

I

"# 

K

nie identyczne

lewa strona jest rna prawej


lub s rnego typu

IK++

$ 

wiksze

lewa strona jest wiksza ni


prawa

I7

$ 

7

wiksze lub
rwne

lewa strona jest wiksza lub


rwna prawej

I7

"# 

mniejsze

lewa strona jest mniejsza ni


prawa

I3

$ 

3

mniejsze lub
rwne

lewa strona jest mniejsza lub


rwna prawej

I3

"# 

Powysze operatory najczciej stosuje si wraz z wartociami cakowitymi lub


zmiennopozycyjnymi, jednak operatora rwnoci mona uy take do porwnania
dwch cigw znakw. Warto powici chwil, aby dobrze zrozumie rnic midzy
operatorami  i . Operator  sprawdza rwno, podczas gdy  przypisuje zmiennej
warto. Dobrze te zapamita, e operator  sprawdza rwno zarwno wartoci,
jak i typw.

Cz II Struktura jzyka PHP

102

Tworzenie zoonych wyrae


za pomoc operatorw logicznych
Operatory logiczne przeprowadzaj dziaania logiczne na operandach. Na przykad
operator alternatywy, oznaczany dwiema kreskami (<<) lub po prostu sowem
 (lub),
zwraca warto logiczn prawda, jeli ktrykolwiek z operandw jest prawdziwy:
"# LL$ 

Powysze wyraenie zwrci warto $ .


Operator koniunkcji, oznaczany dwoma znakami ampersand (==) lub po prostu sowem  (i), zwraca warto logiczn prawda tylko wwczas, gdy oba operandy s
prawdziwe:
"# MM$ 

Powysze wyraenie zwrci warto .- . W rzeczywistoci operatorw logicznych


nie uywa si na staych, ale na dwch lub wicej wyraeniach, majcych warto
logiczn. Na przykad:
I7MMI3

Powysze wyraenie zwrci warto $ tylko wtedy, gdy warto ; jest wiksza
od > i mniejsza od 6. Uywamy nawiasw, aby zwikszy czytelno kodu i okreli
kolejno obliczania wartoci wyrae. W tabeli 5.5 prezentujemy dostpne operatory
logiczne.
Tabela 5.5. Operatory logiczne
Operator

Nazwa

Zwraca prawd, jeli

Przykad

Rezultat

LL

alternatywa
(lub)

lewa lub prawa strona jest


prawdziwa

"# LL$ 

"# 



alternatywa
(lub)

lewa lub prawa strona jest


prawdziwa

"# $ 

"# 



rnica
symetryczna
(xor)

lewa lub prawa strona jest


prawdziwa, ale nie obie

"# "# 

$ 

MM

koniunkcja (i)

lewa i prawa strona jest


prawdziwa

"# MM$ 

$ 

koniunkcja (i)

lewa i prawa strona jest


prawdziwa

"# 
$ 

$ 

negacja (nie)

pojedynczy operand nie jest


prawdziwy

K"# 

$ 

Dociekliwi na pewno zastanawiaj si, czemu istniej dwie wersje operatora koniunkcji
i alternatywy. To dobre pytanie, odpowiemy na nie w nastpnym podrozdziale.

Rozdzia 5. Podstawowe elementy jzyka PHP

103

Kolejno operatorw
PHP zazwyczaj odczytuje wyraenia od lewej do prawej. Jednak w przypadku wyrae skadajcych si z wicej ni jednego operatora, stosowanie tej zasady moe prowadzi do niejasnoci. Rozwamy prosty przykad:


Nie ma tu miejsca na adne niejasnoci, PHP po prostu doda 1 do 6. Co jednak w przypadku takiego wyraenia, zoonego z dwch operatorw:
H

Tutaj pojawia si problem. Czy silnik PHP powinien doda 1 do 6, a nastpnie pomnoy cao przez >, co da rezultat
? A moe oznacza to, e do 1 naley doda wynik
mnoenia 6 razy >, co da rezultat 1? Gdyby czyta wyraenie od lewej do prawej,
prawdziwe byoby pierwsze stwierdzenie. Jednak PHP przypisuje poszczeglnym
operatorom rne priorytety, a poniewa operator mnoenia ma wikszy priorytet ni
dodawania, to wanie drugie stwierdzenie jest prawdziwe. A wic wynikiem wyraenia
jest 1 plus rezultat mnoenia 6 razy >.
Moemy jednak zmieni kolejno operatorw, zawierajc wyraenia w nawiasach.
W poniszym przykadzie najpierw przeprowadzone zostanie dodawanie, a dopiero
potem mnoenie:
H

W przypadku wyrae zoonych, niezalenie od priorytetw operatorw, warto stosowa nawiasy, aby uczyni kod bardziej czytelnym i uchroni si od powanych bdw, takich jak naliczenie w sklepie internetowym podatku od niewaciwej kwoty.
Oto lista dotychczas omwionych operatorw, w kolejnoci priorytetw (od najwikszego do najmniejszego):
@GG@

6@H@J
@G
3@3@7@7
@@K
MM
LL
@@G@6@H@J@)


I!#
!#

Jak wida, operatory


 i  maj mniejszy priorytet ni odpowiadajce im operatory
<< i ==. A wic mona uy odpowiedniej wersji, aby okreli kolejno obliczania
wyraenia zoonego. Ponisze wyraenia s rwnowane, ale drugie z nich jest o wiele
bardziej czytelne:
I
LL
IMMLL

Cz II Struktura jzyka PHP

104

Co wicej, ponisze wyraenie jest jeszcze bardziej czytelne:


IMM

Podkrelmy jeszcze raz, wszystkie trzy wersje s rwnowane.


Priorytety to jedyne, co odrnia operatory == i  (a take << i
), nie zawsze jednak
warto polega na priorytetach. W wikszoci sytuacji uycie nawiasw sprawia, e kod
staje si bardziej czytelny i mniej podatny na bdy. A wic w dalszej czci ksiki
bdziemy stosowali operatory << i ==, kolejno wyrae oznaczajc za pomoc nawiasw.

Stae
Uycie zmiennych to bardzo elastyczny sposb przechowywania danych, ich warto
mona zmienia w kadym miejscu skryptu. Czasem jednak zachodzi potrzeba stosowania wartoci niezmiennych w trakcie dziaania skryptu wtedy przydatne staj
si stae. Aby utworzy sta, naley uy wbudowanej funkcji PHP + .  '(. Warto
staej pozostaje niezmieniona, a do nastpnego uycia + .  '(. Aby zdefiniowa
sta, w nawiasie w wywoaniu funkcji naley umieci nazw staej i jej warto, oddzielone przecinkiem:

$+/-N-*O-1PQ+@

Wartoci staej moe by liczba, cig znakw czy warto logiczna. Warto postpowa
zgodnie z konwencj i nazywa stae wielkimi literami. Aby pozna warto staej,
wystarczy uy jej nazwy (nie naley poprzedza jej symbolem dolara). Na listingu 5.4
pokazujemy, jak zdefiniowa i sprawdzi warto staej:
Listing 5.4. Definiowanie staej
2345
2
$+ %P-RS.,T+@+==+
2+U "# #!?+) %P-RS.,T
247

Korzystajc ze staych, powinnimy pamita, e mona uy ich w dowolnym miejscu


skryptu, a take w doczanych skryptach zewntrznych.

Warto zauway, e w linii 3. uylimy operatora konkatenacji, aby sklei warto staej
z cigiem *?%:$ @:!2:*. Jest to moliwe dziki temu, e PHP traktuje sta w taki
sam sposb, jak cig znakw, ktry reprezentuje.
Powyszy kod naley umieci w pliku stala.php, w katalogu nadrzdnym serwera
WWW. Po otwarciu skryptu w przegldarce internetowej, powinien pojawi si nastpujcy rezultat:
U "# #!?==

Rozdzia 5. Podstawowe elementy jzyka PHP

105

Funkcja + .  '( moe przyjmowa jeszcze trzeci argument, bdcy wartoci logiczn. Okrela on, czy w nazwie staej powinna by rozrniana wielko liter. Domylnie wielko liter ma znaczenie, jednak przekazujc $ jako trzeci argument,
moesz to zmieni. Wtedy warto staej, zdefiniowanej w nastpujcy sposb:

$+ %P-RS.,T+@+==+@"# 

moemy otrzyma, nie zwracajc uwagi na wielko liter:


( #!?
 P S.!?
 %P-RS.,T

Powysze wyraenia s rwnowane, kade z nich wypisze warto >556. Dziki temu
moemy uczyni kod nieco bardziej przyjaznym dla innych programistw, korzystajcych z naszych staych. Jednak z drugiej strony, biorc pod uwag to, e w nazwach
staych domylnie jest rozrniana wielko liter, moe to tylko przysporzy kopotw
innym programistom. A wic jeli nie ma wanego powodu, aby postpowa inaczej,
lepiej w nazwach staych bra pod uwag wielko liter, a take nazywa stae wielkimi literami. To prosta (i oglnie przyjta) konwencja.

Stae predefiniowane
PHP daje dostp do pewnych wbudowanych staych. Na przykad  zwraca nazw pliku, zawierajcego obecnie wykonywany skrypt. Staa  zwraca biec
lini w pliku. Te stae s szczeglnie uyteczne do wywietlenia komunikatu o bdzie.
Aby pozna wersj PHP dziaajc na serwerze, mona uy staej A.

Podsumowanie
W tym rozdziale omwilimy niektre podstawowe cechy jzyka PHP. Opisalimy
zmienne, zastosowanie operatora przypisania do zmiany ich wartoci, wspomnielimy
o zasigu zmiennych oraz wbudowanych zmiennych superglobalnych. Omwilimy
najpopularniejsze operatory i pokazalimy, jak za ich pomoc tworzy zoone wyraenia. Wreszcie pokazalimy, jak definiowa i pobiera warto staych.
Teraz, gdy ju opanowalimy podstawy PHP, w nastpnym rozdziale moemy ruszy
do przodu. Pokaemy, jak pisa skrypty podejmujce decyzje i powtarzajce pewne
zadania. Bdziemy opiera si na wiedzy zdobytej w tym rozdziale.

Pytania i odpowiedzi
P:

Kiedy przydaje si znajomo typu zmiennej?

O: Czsto typ zmiennej ma wpyw na to, jakie operacje mona na niej przeprowadza.
Na przykad nie mona stosowa operacji tablicowych na cigu znakw. Warto

Cz II Struktura jzyka PHP

106

te przed wykonaniem operacji arytmetycznych sprawdzi, czy odpowiednie


zmienne s typu cakowitego czy zmiennopozycyjnego (nawet jeli silnik
PHP sam przeprowadzi odpowiedni konwersj).
P:

Czy nazywajc zmienne, powinienem stosowa si do jakich konwencji?

O: Podstawowym celem powinno zawsze by zwikszenie czytelnoci kodu.


Nazwa zmiennej , >/>16 nic nie mwi o jej znaczeniu w skrypcie, atwo
te o pomyk w zapisie takiej nazwy. Nazwy zmiennych powinny by krtkie
i opisowe.
Nazwa zmiennej  najprawdopodobniej nie bdzie nic znaczy, gdy wrcimy
do kodu po miesicu. O wiele lepsz nazw dla zmiennej jest @3&- 2.
P:

Czy priorytetw operatorw naley uczy si na pami?

O: Czemu nie, chocia najprawdopodobniej szkoda na to czasu. Korzystajc


z nawiasw, moemy zarwno uczyni kod bardziej czytelnym, jak i wybra
swoj wasn kolejno obliczania wyrae.

Warsztaty
Warsztaty maj na celu utrwalenie i sprawdzenie zdobytej wiedzy, powinny te pokaza, jak zastosowa j w praktyce.

Test
1. Ktra z poniszych nazw zmiennych nie jest poprawna?
 #"!!
 "?!?
888888I
I888888
 ?
!  !
  G ?

2. Jaki bdzie rezultat dziaania poniszego kodu?


 
(!!   
 

3. Jaki bdzie rezultat dziaania poniszej instrukcji?


 ""++

4. Jaki bdzie rezultat dziaania poniszego fragmentu?


"")88
""""@+" #+
""

Rozdzia 5. Podstawowe elementy jzyka PHP

107

5. Ktre z poniszych instrukcji nie s wyraeniami?



""
6

6. Ktre z instrukcji w pytaniu 5. zawieraj operator?


7. Co zwrci ponisze wyraenie?
3

Jaki bdzie typ zwrconej wartoci?

Odpowiedzi
1. Nazwa zmiennej 999999;%@ nie jest poprawna, gdy nie zaczyna si liter lub
znakiem podkrelenia. Nazwa zmiennej "! :3@ #! nie jest poprawna, gdy
zawiera spacj. Zmienna @3B&- 2 jest take niepoprawna, gdy zawiera
niedozwolony znak (B).
2. Kod wywietli liczb //. W czasie rzutowania na warto logiczn tworzona
jest kopia wartoci zmiennej , jednak sama zmienna nie jest

modyfikowana.
3. Instrukcja wywietli cig znakw * $ #*.
4. Kod wywietli warto 6. Gdy liczba zmiennopozycyjna zostaje zamieniona

na cakowit, obcita zostaje caa cz dziesitna.


5. Kada z tych instrukcji to wyraenie, kada zwraca jak warto.
6. Instrukcja 6C > zawiera operator dzielenia.
7. Wyraenie zwrci warto logiczn .- .

wiczenia
1. Utwrz skrypt zawierajcy co najmniej pi rnych zmiennych. Wypenij
je wartociami rnych typw, a nastpnie zastosuj funkcj # $$%& '(,

aby pozna ich typ.


2. Przypisz wartoci dwm zmiennym. Uyj operatorw porwnania,

aby sprawdzi, czy pierwsza warto jest




taka sama jak druga,

mniejsza ni druga,

wiksza ni druga,

mniejsza lub rwna drugiej.

Rezultat kadego z testw wywietl w przegldarce. Zmie wartoci


zmiennych i uruchom skrypt ponownie.

You might also like