Darmowy fragment publikacji:
Tytuł oryginału: PHP and MySQL Phrasebook
Tłumaczenie: Daniel Kaczmarek
ISBN: 978-83-246-7023-9
Authorized translation from the English language edition, entitled: PHP AND MYSQL
PHRASEBOOK; ISBN 0321834631; by Christian Wenz; published by Pearson Education, Inc,
publishing as Addison Wesley.
Copyright © 2013 Pearson Education, Inc.
All rights reserved. No part of this book may by reproduced or transmitted in any form or by any
means, electronic or mechanical, including photocopying, recording or by any information storage
retrieval system, without permission from Pearson Education, Inc.
Polish language edition published by HELION S.A. Copyright © 2013.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any
means, electronic or mechanical, including photocopying, recording or by any information storage
retrieval system, without permission from the Publisher.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej
publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną,
fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym
powoduje naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi
bądź towarowymi ich właścicieli.
Wydawnictwo HELION dołożyło wszelkich starań, by zawarte w tej książce informacje były
kompletne i rzetelne. Nie bierze jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za
związane z tym ewentualne naruszenie praw patentowych lub autorskich. Wydawnictwo HELION
nie ponosi również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania
informacji zawartych w książce.
Wydawnictwo HELION
ul. Kościuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
WWW: http://helion.pl (księgarnia internetowa, katalog książek)
Pliki z przykładami omawianymi w książce można znaleźć pod adresem:
ftp://ftp.helion.pl/przyklady/phmsro.zip
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie/phmsro
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Printed in Poland.
• Kup książkę
• Poleć książkę
• Oceń książkę
• Księgarnia internetowa
• Lubię to! » Nasza społeczność
Spis treĂci
O autorze ..........................................................................11
Wprowadzenie ..................................................................13
Wprowadzenie do drugiego wydania ..............................17
1 Operacje na ciÈgach znaków ............................................21
Porównywanie ciÈgów znaków ............................................ 22
Sprawdzanie nazw uĝytkowników i haseï ............................ 23
Przeksztaïcanie ciÈgów znaków w kod HTML ....................... 25
Stosowanie znaków nowego wiersza ................................... 29
Szyfrowanie ciÈgów znaków ................................................ 29
Sprawdzanie sum kontrolnych ciÈgów znaków .................... 31
WyodrÚbnianie fragmentów ciÈgów znaków ....................... 35
Zabezpieczanie adresów poczty elektronicznej
przy uĝyciu kodów ASCII .................................................... 36
Skanowanie sformatowanych ciÈgów znaków ..................... 41
Uzyskiwanie szczegóïowych informacji na temat zmiennych .... 43
Wyszukiwanie w ciÈgach znaków ........................................ 44
Stosowanie wyraĝeñ regularnych zgodnych z Perlem ........... 48
Znajdowanie znaczników przy uĝyciu wyraĝeñ regularnych ..... 49
Poleć książkęKup książkęSpis treĂci
Weryfikacja obecnoĂci danych wymaganych ........................ 50
Weryfikacja poprawnoĂci adresów poczty elektronicznej ...... 54
Wyszukiwanie i zastÚpowanie .............................................. 56
2 Korzystanie z tablic .......................................................... 59
Odczytywanie wszystkich elementów z tablic numerycznych ..... 61
Odczytywanie wszystkich elementów z tablic asocjacyjnych ...... 63
Odczytywanie wszystkich elementów z tablic zagnieĝdĝonych .... 65
Przeksztaïcanie zawartoĂci tablicy w zmienne ....................... 68
Przeksztaïcanie ciÈgów znaków w tablice ............................. 69
Przeksztaïcanie tablic w ciÈgi znaków ................................... 70
Alfabetyczne sortowanie zawartoĂci tablic ............................ 71
Alfabetyczne sortowanie zawartoĂci tablic asocjacyjnych ...... 73
Sortowanie zawartoĂci tablic zagnieĝdĝonych ....................... 75
Sortowanie zagnieĝdĝonych tablic asocjacyjnych .................. 77
Sortowanie adresów IP w sposób naturalny ......................... 79
Sortowanie dowolnych wartoĂci ............................................. 81
Sortowanie ciÈgów w róĝnych jÚzykach ................................ 82
Przetwarzanie wszystkich elementów tablicy ........................ 85
Filtrowanie tablic ................................................................. 89
Odczytywanie z tablicy losowo wybranych elementów ......... 91
Nadawanie obiektom zachowania
charakterystycznego dla tablic .......................................... 93
3 Data i czas ........................................................................ 97
Uĝywanie danych tekstowych w funkcji date() .................... 100
Formatowanie obiektów DateTime ..................................... 102
Automatyczna lokalizacja dat ............................................. 103
RÚczna lokalizacja dat ........................................................ 107
Odczytywanie bieĝÈcej daty w formatach amerykañskim,
brytyjskim i europejskim ................................................... 108
4
Poleć książkęKup książkę
Spis treĂci
Formatowanie z góry okreĂlonej daty ................................. 109
Weryfikacja poprawnoĂci daty ........................................... 111
Obliczanie daty wzglÚdnej ................................................. 112
Tworzenie znacznika czasu, który moĝna sortowaÊ ............. 113
Przeksztaïcanie ciÈgu znaków w datÚ ................................. 115
Ustalanie czasu wschodu i zachodu sïoñca ......................... 116
Uĝywanie daty i czasu dla celów porównawczych .............. 118
Zastosowanie pól formularzy do wyboru daty .................... 120
Formularz do wyboru daty, który sam siÚ uaktualnia .......... 122
Obliczanie róĝnicy miÚdzy dwiema datami ......................... 124
Zastosowanie daty i czasu GMT ......................................... 128
4 Praca z obiektami (i zagadnienia pokrewne) .................131
Definiowanie klas .............................................................. 132
Dziedziczenie ..................................................................... 134
Korzystanie z abstrakcyjnych klas i interfejsów ................... 136
Zapobieganie dziedziczeniu i pokrywaniu .......................... 141
Automatyczne ïadowanie ................................................... 142
Klonowanie obiektów ........................................................ 145
Serializacja i deserializacja obiektów .................................. 147
Implementowanie singletonów .......................................... 149
Stosowanie cech ................................................................ 154
5 Przetwarzanie formularzy internetowych ......................159
Wysyïanie danych z formularza z powrotem do skryptu ..... 161
Odczytywanie danych z formularza .................................... 162
Sprawdzanie, czy formularz zostaï wysïany na serwer ........ 164
Zapisywanie danych z formularza w pliku cookie ............... 166
Wypeïnianie pól tekstowych i pól haseï
wartoĂciami predefiniowanymi ........................................ 169
5
Poleć książkęKup książkęSpis treĂci
Wypeïnianie wartoĂciami predefiniowanymi
wielowierszowych pól tekstowych .................................... 173
WstÚpne zaznaczanie pól opcji ........................................... 175
WstÚpne zaznaczanie pól wyboru ...................................... 177
WstÚpne zaznaczanie pozycji na listach wyboru ................. 178
WstÚpne zaznaczanie pozycji na listach
wielokrotnego wyboru ..................................................... 180
Przetwarzanie graficznych przycisków przesyïania danych
z formularzy ..................................................................... 183
Sprawdzanie pól obowiÈzkowych ....................................... 185
Sprawdzanie list wyboru .................................................... 187
Neutralizacja danych wynikowych ...................................... 190
Weryfikacja poprawnoĂci danych wejĂciowych ................... 192
Zapisywanie wszystkich danych formularza do pliku ........... 193
Wysyïanie danych formularza pocztÈ elektronicznÈ ............ 195
Odczytywanie informacji na temat plików wysyïanych
na serwer ......................................................................... 196
Przenoszenie plików wysïanych na serwer
do bezpiecznej lokalizacji ................................................. 199
¥ledzenie postÚpu wysyïania pliku na serwer ..................... 201
6 ZapamiÚtywanie danych uĝytkowników
— pliki cookie i sesje ..................................................... 207
Pliki cookie ......................................................................... 208
Tworzenie pliku cookie ....................................................... 212
Odczytywanie danych z plików cookie ................................ 215
Ustawianie (rozsÈdnej) daty wygasania waĝnoĂci ............... 215
Ustawianie daty wygasania waĝnoĂci
dla konkretnego klienta .................................................... 217
Usuwanie pliku cookie ....................................................... 219
UdostÚpnianie plików cookie róĝnym domenom ................. 220
Sprawdzanie, czy klient obsïuguje pliki cookie .................... 222
6
Poleć książkęKup książkę
Spis treĂci
Zapisywanie wielu danych w jednym pliku cookie .............. 224
Zapisywanie jÚzyka preferowanego przez uĝytkownika ...... 227
Sesje .................................................................................. 229
Gdzie sÈ przechowywane sesje? .......................................... 230
Jak utrzymuje siÚ stan sesji? ............................................... 231
Rozpoczynanie sesji ........................................................... 233
Odczytywanie i zapisywanie sesji ....................................... 234
Zamykanie sesji ................................................................. 235
Zmiana identyfikatora sesji ................................................. 236
Implementacja wïasnego mechanizmu zarzÈdzania sesjami .... 238
Tworzenie zabezpieczonego obszaru za pomocÈ sesji ........ 243
Tworzenie zabezpieczonego obszaru bez korzystania z sesji .... 245
7 Korzystanie z plików w systemie plików serwera ..........249
Otwieranie i zamykanie plików .......................................... 250
Odczytywanie danych z plików .......................................... 255
Zapisywanie danych do plików .......................................... 256
Blokowanie plików ............................................................ 258
Uzyskiwanie dostÚpu do plików
przy uĝyciu Ăcieĝek wzglÚdnych ........................................ 259
Unikanie zagroĝeñ bezpieczeñstwa zwiÈzanych
z dostÚpem do plików ...................................................... 261
Przetwarzanie plików z danymi w formacie CSV ................. 262
Parsowanie plików INI ....................................................... 267
Odczytywanie informacji o plikach ..................................... 269
Kopiowanie, przenoszenie i usuwanie plików .................... 272
PrzeglÈdanie zawartoĂci systemu plików ............................ 273
Korzystanie ze strumieni PHP ............................................. 274
Przetwarzanie archiwów Bzip2 ........................................... 277
Zwracanie plików w ĝÈdaniu HTTP ..................................... 280
7
Poleć książkęKup książkęSpis treĂci
8 Korzystanie z baz danych MySQL .................................. 283
NawiÈzywanie poïÈczenia z MySQLi ................................... 285
Wysyïanie poleceñ jÚzyka SQL do serwera MySQL .............. 288
Instrukcje przygotowywane w MySQL ................................ 290
Odczytywanie wyników zapytania
wykonanego przez MySQL ................................................ 292
Sprawdzanie ostatnio wstawionego identyfikatora ............. 295
Wykonywanie transakcji ..................................................... 296
9 Korzystanie z innych baz danych ................................... 299
NawiÈzywanie poïÈczenia ze SQLite ................................... 300
Wysyïanie poleceñ SQL do bazy SQLite ............................... 303
Odczytywanie wyników wykonania zapytania przez SQLite ..... 305
Wykonywanie instrukcji przygotowywanych w SQLite ........ 308
NawiÈzywanie poïÈczenia z PostgreSQL ............................. 310
Wysyïanie poleceñ SQL do bazy PostgreSQL ....................... 311
Zmienianie danych w bazie PostgreSQL .............................. 313
Odczytywanie wyników zapytania wykonanego
w bazie PostgreSQL .......................................................... 314
NawiÈzywanie poïÈczenia z bazÈ danych Oracle ................. 316
Wysyïanie poleceñ SQL do bazy danych Oracle ................... 317
Odczytywanie wyników zapytania wykonanego
w bazie Oracle ................................................................. 320
NawiÈzywanie poïÈczenia z serwerem MSSQL .................... 322
Wysyïanie poleceñ SQL do bazy danych MSSQL .................. 324
Odczytywanie wyników zapytania wykonanego
w bazie MSSQL ................................................................ 326
Wykonywanie instrukcji przygotowywanych w MSSQL ....... 328
Korzystanie z serwera MSSQL bez systemu Windows ......... 329
NawiÈzywanie poïÈczenia z serwerem Firebird ................... 332
Wysyïanie poleceñ SQL do bazy Firebird ............................. 333
8
Poleć książkęKup książkę
Spis treĂci
Odczytywanie wyników wykonania zapytania przez Firebird .... 335
NawiÈzywanie poïÈczenia za poĂrednictwem PDO ............. 336
Wykonywanie poleceñ SQL za poĂrednictwem PDO ........... 339
Odczytywanie wyników wykonania zapytania
za poĂrednictwem PDO .................................................... 340
10 Korzystanie z jÚzyka XML ...............................................343
Parsowanie danych XML przy uĝyciu SAX ........................... 345
Parsowanie danych XML przy uĝyciu XMLReadera ............. 347
Odczytywanie danych XML przy uĝyciu DOM ..................... 349
Zapisywanie danych XML przy uĝyciu DOM ........................ 351
Zapisywanie danych XML przy uĝyciu XMLWritera ............. 352
Zastosowanie SimpleXML .................................................. 354
Zastosowanie XPath wraz z SimpleXML ............................. 356
Przeksztaïcanie danych XML przy uĝyciu XSL ...................... 356
Weryfikacja poprawnoĂci danych XML ............................... 358
11 Komunikowanie siÚ z innymi ěródïami ...........................361
Èczenie siÚ z serwerami HTTP ........................................... 361
Èczenie siÚ z serwerami FTP .............................................. 365
Sprawdzanie, czy serwer wciÈĝ odpowiada ........................ 367
Tworzenie usïugi sieciowej za pomocÈ NuSOAP ................. 372
Automatyczne generowanie WSDL za pomocÈ NuSOAP ..... 374
Korzystanie z usïugi sieciowej za pomocÈ NuSOAP ............. 376
Tworzenie usïugi sieciowej
przy uĝyciu rozszerzenia SOAP PHP 5 ................................ 378
Korzystanie z usïugi sieciowej
za pomocÈ rozszerzenia SOAP PHP 5 ................................ 381
Wykorzystanie technologii Ajax .......................................... 382
Wymiana danych z serwerem ............................................ 386
Skorowidz .......................................................................391
9
Poleć książkęKup książkęSpis treĂci
10
Poleć książkęKup książkę4
Praca z obiektami
(i zagadnienia
pokrewne)
P
rogramowanie zorientowane obiektowo (ang. object-
-oriented programming — OOP) to jeden z najczÚĂciej
wspóïczeĂnie stosowanych paradygmatów programowania.
W pierwszych latach swego istnienia PHP w ogóle nie byï
postrzegany jako jÚzyk zorientowany obiektowo. Dopiero
w PHP 4 dodano pewne ograniczone mechanizmy obiek-
towe i znacznie je wzbogacono w PHP 5.
Niniejsza ksiÈĝka jest leksykonem rozmówek, a programo-
wanie zorientowane obiektowo doĂÊ wyraěnie róĝni siÚ od
innych poruszanych tutaj zagadnieñ. Rozmówki w orientacji
obiektowej zwykle sÈ obszerne, dotyczÈ pewnych bardzo
konkretnych przypadków albo wrÚcz odwrotnie — majÈ
charakter na tyle ogólny, ĝe wrÚcz moĝna je postrzegaÊ jako
wiedzÚ powszechnie znanÈ (której poszukuje siÚ stosunko-
wo rzadko).
Poleć książkęKup książkęDefiniowanie klas
Zastanawiaïem siÚ nad kilkoma podejĂciami do tego roz-
dziaïu i w koñcu zdecydowaïem siÚ zaprezentowaÊ mieszan-
kÚ zagadnieñ zorientowanych obiektowo i im pokrewnych
— frazy, które ilustrujÈ przydatnoĂÊ mniej trywialnych me-
chanizmów obiektowych dostÚpnych w PHP, frazy, któ-
re wyjaĂniajÈ pewne podstawowe konstrukcje obiektowe,
i jeszcze kilka fraz o innym charakterze. W programowaniu
obiektowym najwaĝniejsze jest praktyczne doĂwiadczenie,
lecz sÈdzÚ, ĝe pomimo tego informacje zawarte w tym roz-
dziale równieĝ od czasu do czasu okaĝÈ siÚ pomocne.
Definiowanie klas
class MyClass {
}
W tym punkcie przedstawiÚ zwiÚzïy (choÊ zdecydowanie
niepeïny) opis najwaĝniejszych mechanizmów obiektowych
obsïugiwanych przez PHP. Centralnym elementem orien-
tacji obiektowej jest klasa. Klasa moĝe zawieraÊ staïe, wïa-
ĂciwoĂci i metody. Z kolei sïowa kluczowe okreĂlajÈce
widocznoĂÊ, takie jak public, protected i private, wska-
zujÈ zakres dostÚpu do danej wïaĂciwoĂci lub metody.
Gdy utworzona zostanie instancja klasy (sïuĝy do tego sïowo
kluczowe new), sïowo kluczowe $this stanowi odwoïanie
do wywoïujÈcego obiektu. Jeĝeli klasa zawiera metodÚ o na-
zwie __construct(), zostanie ona wywoïana w momencie
tworzenia instancji klasy, co widaÊ na listingu 4.1.
4
A
I
Z
D
Z
O
R
I
)
E
N
W
E
R
K
O
P
A
N
E
I
N
D
A
G
A
Z
I
(
I
M
A
T
K
E
I
B
O
Z
A
C
A
R
P
132
Poleć książkęKup książkęDefiniowanie klas
Listing 4.1. Implementacja klasy (class.php)
?php
class MyClass {
private $prop = null;
public function setProperty($value) {
$this- prop = $value;
}
public function getProperty() {
return $this- prop;
}
public function __construct($value = null) {
if ($value !== null) {
$this- prop = $value;
}
}
}
$c = new MyClass( abc );
echo $c- getProperty();
?
UWAGA
DostÚpne sÈ trzy nastÚpujÈce poziomy widocznoĂci:
public — dostÚpnoĂÊ z kaĝdego miejsca kodu.
protected — dostÚpnoĂÊ jedynie z wnÚtrza tej samej
klasy oraz z jej klas potomnych, a takĝe z instancji tej samej
klasy i klas potomnych.
private — dostÚpnoĂÊ jedynie z wnÚtrza tej samej klasy
oraz z instancji tej samej klasy.
R
O
Z
D
Z
I
A
4
P
R
A
C
A
Z
O
B
I
E
K
T
A
M
I
(
I
Z
A
G
A
D
N
I
E
N
A
P
O
K
R
E
W
N
E
)
I
133
Poleć książkęKup książkęDziedziczenie
DostÚp do wïaĂciwoĂci i metod klasy moĝna teĝ uzyskaÊ bez
wczeĂniejszego tworzenia instancji tej klasy — sïuĝy do tego
kontekst statyczny (i sïowo kluczowe static). Co oczywiste,
dostÚp do metod statycznych nie jest moĝliwy za poĂred-
nictwem $this. Odwoïanie do bieĝÈcej klasy zapewnia na-
tomiast sïowo self. Odpowiedni przykïad znajduje siÚ na
listingu 4.2.
Listing 4.2. Implementacja klasy z metodÈ i wïaĂciwoĂciÈ statycznÈ
(static.php)
?php
class MyStaticClass {
private static $prop = abc ;
public static function getProperty() {
return self::$prop;
}
}
echo MyStaticClass::getProperty();
?
Dziedziczenie
class MyDerivedClass extends MyBaseClass {
}
Klasa moĝe dziedziczyÊ po innej klasie za pomocÈ sïowa
kluczowego extends. W konsekwencji nowa klasa bÚdzie
zawieraÊ (dziedziczyÊ) wszystkie publiczne i chronione
metody klasy bazowej. OczywiĂcie w klasach potomnych
moĝna pokrywaÊ odziedziczone metody.
4
A
I
Z
D
Z
O
R
I
)
E
N
W
E
R
K
O
P
A
N
E
I
N
D
A
G
A
Z
I
(
I
M
A
T
K
E
I
B
O
Z
A
C
A
R
P
134
Poleć książkęKup książkęDziedziczenie
DostÚp do klasy przodka zapewnia sïowo kluczowe parent.
Jego skïadnia przypomina odwoïanie statyczne, jednak ta-
kim nie jest. W wywoïywanej w ten sposób metodzie moĝna
zatem uĝywaÊ sïowa $this.
Kod widoczny na listingu 4.3 pokrywa konstruktor w klasie
potomnej, ale takĝe wywoïuje konstruktor klasy przodka.
Warto zwróciÊ uwagÚ, ĝe sygnatury obydwóch konstrukto-
rów róĝniÈ siÚ od siebie. W kodzie gïównym równieĝ wy-
woïywana jest metoda klasy bazowej.
Listing 4.3. Dziedziczenie w PHP (extends.php)
?php
class MyBaseClass {
protected $value1 = null;
protected $value2 = null;
protected function __construct($value = null) {
if ($value !== null) {
$this- value1 = $value;
}
}
public function getValue1() {
return $this- value1;
}
}
class MyDerivedClass extends MyBaseClass {
protected $value2 = null;
public function __construct($value1 = null,
´$value2 = null) {
if ($value1 !== null) {
parent::__construct($value1);
if ($value2 !== null) {
$this- value2 = $value2;
}
R
O
Z
D
Z
I
A
4
P
R
A
C
A
Z
O
B
I
E
K
T
A
M
I
(
I
Z
A
G
A
D
N
I
E
N
A
P
O
K
R
E
W
N
E
)
I
135
Poleć książkęKup książkęKorzystanie z abstrakcyjnych klas i interfejsów
}
}
public function getValue2() {
return $this- value2;
}
}
$c = new MyDerivedClass( abc , def );
echo 1: , $c- getValue1(), , 2: ,
´$c- getValue2();
?
UWAGA
PHP nie obsïuguje dziedziczenia wielokrotnego, co oznacza, ĝe
dana klasa moĝe dziedziczyÊ tylko po (dokïadnie) jednej innej kla-
sie. OczywiĂcie klasa B moĝe dziedziczyÊ po klasie A, a klasa C
moĝe dziedziczyÊ po klasie B, dziÚki czemu klasa C bÚdzie dzie-
dziczyÊ równieĝ publiczne i chronione metody klasy A.
Korzystanie z abstrakcyjnych
klas i interfejsów
abstract class MyAbstractBaseClass {
}
PHP obsïuguje dwa dodatkowe mechanizmy dziedziczenia:
klasy abstrakcyjne i interfejsy. Obydwie konstrukcje sÈ do
siebie podobne, lecz róĝnice miÚdzy nimi majÈ charakter
zasadniczy. Celem obydwóch jest wyznaczenie szablonu dla
4
A
I
Z
D
Z
O
R
I
)
E
N
W
E
R
K
O
P
A
N
E
I
N
D
A
G
A
Z
I
(
I
M
A
T
K
E
I
B
O
Z
A
C
A
R
P
136
Poleć książkęKup książkęKorzystanie z abstrakcyjnych klas i interfejsów
klasy potomnej; inaczej mówiÈc, klasa bazowa (albo klasy
bazowe, o czym wiÚcej powiem za chwilÚ) definiuje, które
metody trzeba zaimplementowaÊ w nowej klasie.
Gdy uĝywa siÚ klasy abstrakcyjnej, dziedziczenia dokonuje
siÚ tak jak zwykle, czyli za pomocÈ sïowa kluczowego
extends. NowoĂciÈ jest natomiast fakt, ĝe klasa bazowa
jest definiowana jako abstrakcyjna, o czym decyduje sïowo
abstract. Ponadto zbiór metod z klasy bazowej teĝ moĝna
oznaczyÊ jako metody abstrakcyjne, lecz nie zawierajÈ one
wówczas ĝadnego kodu ěródïowego:
protected abstract function myMethod();
W takim przypadku klasa potomna musi bezwzglÚdnie im-
plementowaÊ tak zdefiniowane metody, metody te muszÈ
mieÊ identyczne sygnatury oraz takie same (lub mniej re-
strykcyjne) ustawienia widocznoĂci. Na przykïad jeĝeli
abstrakcyjna klasa bazowa definiuje abstrakcyjnÈ metodÚ
chronionÈ, wówczas klasa potomna musi implementowaÊ
tÚ metodÚ jako chronionÈ lub publicznÈ. Jeĝeli w klasie ba-
zowej wskazywane sÈ typy, w klasie potomnej muszÈ one
byÊ identyczne.
Jeĝeli metoda abstrakcyjna zawiera dodatkowe metody, które
nie sÈ zadeklarowane jako abstrakcyjne, wówczas dziedzi-
czy siÚ je tak samo jak po zwykïych klasach, o ile bÚdÈ one
chronione lub publiczne. Ilustruje to kod ěródïowy przed-
stawiony na listingu 4.4.
R
O
Z
D
Z
I
A
4
P
R
A
C
A
Z
O
B
I
E
K
T
A
M
I
(
I
Z
A
G
A
D
N
I
E
N
A
P
O
K
R
E
W
N
E
)
I
137
Poleć książkęKup książkęKorzystanie z abstrakcyjnych klas i interfejsów
Listing 4.4. Zastosowanie klasy abstrakcyjnej (abstract.php)
?php
abstract class MyAbstractBaseClass {
protected $value1 = null;
protected $value2 = null;
protected function getValue1() {
return $this- value1;
}
protected function getValue2() {
return $this- value2;
}
protected abstract function dumpData();
}
class MyAbstractClass extends
´MyAbstractBaseClass {
public function __construct($value1 = null,
´$value2 = null) {
if ($value1 !== null) {
$this- value1 = $value1;
if ($value2 !== null) {
$this- value2 = $value2;
}
}
}
public function dumpData() {
echo 1: , $this- getValue1(), , 2: ,
´$this- getValue2();
}
}
$c = new MyAbstractClass( ghi , jkl );
$c- dumpData();
?
Podobnie jak zwykïe klasy, klasy abstrakcyjne obsïugujÈ
tylko dziedziczenie po jednej klasie przodka.
4
A
I
Z
D
Z
O
R
I
)
E
N
W
E
R
K
O
P
A
N
E
I
N
D
A
G
A
Z
I
(
I
M
A
T
K
E
I
B
O
Z
A
C
A
R
P
138
Poleć książkęKup książkęKorzystanie z abstrakcyjnych klas i interfejsów
„Takie samo, ale inne” jest dziaïanie interfejsów. Interfejs
wyglÈda jak zwykïa klasa jÚzyka PHP, w której jednak za-
miast sïowa class uĝywa siÚ sïowa interface. Interfejs
w ogóle nie zawiera ĝadnej implementacji, a jedynie sy-
gnatury funkcji. Wszystkie te funkcje muszÈ mieÊ charakter
publiczny.
Definiowana klasa „dziedziczy” po interfejsie. W tym kon-
tekĂcie mówi siÚ jednak zawsze, ĝe klasa implementuje
interfejs. PodkreĂla to sïowo kluczowe implements, które
zastÚpuje sïowo extends.
Pozostaïe reguïy sÈ bardzo podobne jak w przypadku klas
abstrakcyjnych. Wszystkie metody interfejsu muszÈ zostaÊ
zaimplementowane, a sygnatury funkcji muszÈ pozostaÊ
identyczne (wïÈcznie z poziomem widocznoĂci, który i tak
zawsze jest publiczny). DodatkowÈ korzyĂciÈ jest to, ĝe
klasa moĝe jednoczeĂnie implementowaÊ wiÚcej niĝ jeden
interfejs, o ile tylko w interfejsach tych nie powtarza siÚ
nazwa ĝadnej z metod.
Kod widoczny na listingu 4.5 tworzy dwa interfejsy, a na-
stÚpnie implementuje je w jednej klasie.
Listing 4.5. Zastosowanie interfejsu (interface.php)
?php
interface MyInterface1 {
public function getValue1();
public function getValue2();
}
interface MyInterface2 {
R
O
Z
D
Z
I
A
4
P
R
A
C
A
Z
O
B
I
E
K
T
A
M
I
(
I
Z
A
G
A
D
N
I
E
N
A
P
O
K
R
E
W
N
E
)
I
139
Poleć książkęKup książkęKorzystanie z abstrakcyjnych klas i interfejsów
public function dumpData();
}
class MyInterfaceClass implements MyInterface1,
´MyInterface2 {
protected $value1 = null;
protected $value2 = null;
public function __construct($value1 = null,
´$value2 = null) {
if ($value1 !== null) {
$this- value1 = $value1;
if ($value2 !== null) {
$this- value2 = $value2;
}
}
}
public function getValue1() {
return $this- value1;
}
public function getValue2() {
return $this- value2;
}
public function dumpData() {
echo 1: , $this- getValue1(), , 2: ,
´$this- getValue2();
}
}
$c = new MyInterfaceClass( mno , pqr );
$c- dumpData();
?
4
A
I
Z
D
Z
O
R
I
)
E
N
W
E
R
K
O
P
A
N
E
I
N
D
A
G
A
Z
I
(
I
M
A
T
K
E
I
B
O
Z
A
C
A
R
P
140
Poleć książkęKup książkęZapobieganie dziedziczeniu i pokrywaniu
Zapobieganie dziedziczeniu
i pokrywaniu
final class MyFinalBaseClass {}
public final function myMethod() {}
IstniejÈ klasy, po których nie powinno siÚ juĝ dziedziczyÊ
(zwïaszcza jeĂli implementujÈ one najbardziej istotne funk-
cje i nie chcemy, aby inni programiĂci te kluczowe funkcje
w jakikolwiek sposób nadpisywali). Aby temu zapobiec,
w PHP udostÚpniono sïowo kluczowe final. FinalnÈ moĝna
uczyniÊ klasÚ (w takim przypadku nie bÚdzie juĝ moĝna
w ogóle po niej dziedziczyÊ); moĝna teĝ zadeklarowaÊ me-
todÚ jako finalnÈ (wówczas nie bÚdzie moĝna jej juĝ wiÚcej
pokrywaÊ). Dlatego kod przedstawiony na listingu 4.6 rzuci
wyjÈtek, widoczny na rysunku 4.1.
Listing 4.6. Zapobieganie nadpisywaniu dziÚki sïowu kluczowemu final
(final.php)
?php
class MyFinalBaseClass {
public final function getCopyrightNotice() {
return copy; by Autor Oryginalny ;
}
}
class MyFinalClass extends MyFinalBaseClass {
function getCopyrightNotice() {
return copy; ja! ;
}
}
?
R
O
Z
D
Z
I
A
4
P
R
A
C
A
Z
O
B
I
E
K
T
A
M
I
(
I
Z
A
G
A
D
N
I
E
N
A
P
O
K
R
E
W
N
E
)
I
141
Poleć książkęKup książkęAutomatyczne ïadowanie
Rysunek 4.1. Metod finalnych nie moĝna pokrywaÊ
OczywiĂcie jeĂli samemu pracujesz nad implementacjÈ klasy
albo metody, deklarowanie ich jako finalnych nie wydaje
siÚ konieczne. Trzeba jednak pamiÚtaÊ, ĝe któregoĂ dnia
zespóï programistyczny moĝe siÚ powiÚkszyÊ albo moĝesz
zdecydowaÊ siÚ na refaktoring wïasnego kodu i umieszcze-
nie go w bibliotece udostÚpnianej innym programistom.
Automatyczne ïadowanie
spl_autoload_register( myAutoloadFunction );
Aby moĝliwe byïo uĝycie klasy, musi ona zostaÊ wczeĂniej
zdefiniowana; w przeciwnym razie PHP rzuci bïÈd. Gdy
jednak w momencie uĝycia klasy ta jeszcze nie jest dostÚpna,
moĝna skorzystaÊ z drugiej szansy. Daje jÈ funkcja spl_
´autoload_register(), która rejestruje funkcjÚ przezna-
czonÈ do wywoïania w sytuacji, gdy kod PHP podejmie
4
A
I
Z
D
Z
O
R
I
)
E
N
W
E
R
K
O
P
A
N
E
I
N
D
A
G
A
Z
I
(
I
M
A
T
K
E
I
B
O
Z
A
C
A
R
P
142
Poleć książkęKup książkęAutomatyczne ïadowanie
próbÚ uĝycia klasy dotÈd niezarejestrowanej. Po wywoïaniu
funkcji rejestrujÈcej kod ěródïowy, który usiïowaï siÚ od-
woïaÊ do niezdefiniowanej klasy, zostanie wykonany po-
nownie. Jeĝeli w tym momencie klasa bÚdzie juĝ dostÚpna,
wykonanie kodu bÚdzie przebiegaÊ dalej w normalny sposób.
W przeciwnym razie zwrócony zostanie standardowy bïÈd.
StandardowÈ praktykÈ jest uĝywanie z góry zdefiniowa-
nego schematu nazewnictwa plików, które zawierajÈ kod
ěródïowy klas, i umieszczanie tych plików w zdefiniowa-
nym katalogu. W takiej konwencji klasa MyClass bÚdzie siÚ
znajdowaÊ w pliku /classes/MyClass.php, a funkcja auto-
matycznego ïadowania widoczna na listingu 4.7 zaïaduje
klasÚ na ĝÈdanie.
Listing 4.7. Automatyczne ïadowanie klas (autoload.php)
?php
function myAutoloadFunction($classname) {
if (preg_match( /^[a-zA-Z_\x7f-\xff]
´[a-zA-Z0-9_\x7f-\xff]*$/ , $classname)) {
// sprawdzenie poprawnoĞci nazwy klasy
require_once /Ăcieĝka/do/classes/
´$classname.class.php ;
}
}
spl_autoload_register( myAutoloadFunction );
?
Tak wiÚc wywoïanie w postaci:
$c = new UnknownClass();
spowoduje, ĝe wywoïana zostanie funkcja myAutoload
´Function(), której parametrem $classname bÚdzie nazwa
klasy UnknownClass.
R
O
Z
D
Z
I
A
4
P
R
A
C
A
Z
O
B
I
E
K
T
A
M
I
(
I
Z
A
G
A
D
N
I
E
N
A
P
O
K
R
E
W
N
E
)
I
143
Poleć książkęKup książkęAutomatyczne ïadowanie
Jeĝeli funkcja spl_autoload_register() zostanie wywo-
ïana wiÚcej niĝ jeden raz, zarejestrowane zostanÈ po kolei
wszystkie funkcje automatycznego ïadowania. PHP bÚdzie
wiÚc wywoïywaÊ kaĝdÈ z nich aĝ do momentu, gdy zde-
finiowana zostanie poĝÈdana klasa — albo gdy wszystkie te
funkcje zostanÈ wywoïane.
UWAGA
Funkcja spl_autoload_register() zostaïa po raz pierwszy
udostÚpniona w PHP 5.1.2 jako element biblioteki SPL (ang.
Standard PHP Library). We wczeĂniejszych wersjach jÚzyka
trzeba byïo implementowaÊ funkcjÚ o nazwie __autoload()
i w niej umieszczaÊ kod odpowiedzialny za automatyczne ïa-
dowanie. W którymĂ momencie rozwoju PHP obsïuga funkcji
__autoload() moĝe zostaÊ caïkowicie wyeliminowana, dlatego
najlepiej jest juĝ teraz uĝywaÊ tylko funkcji spl_autoload_
´register().
UWAGA
PHP umoĝliwia wywoïywanie metod i wïaĂciwoĂci klas, które nie
istniejÈ:
Jeĝeli wywoïywana jest metoda klasy i metoda ta nie ist-
nieje, wówczas wywoïana zostaje metoda __call() tej
klasy, o ile ta metoda istnieje.
Jeĝeli odczytywana jest wïaĂciwoĂÊ klasy i wïaĂciwoĂÊ tej klasy
nie istnieje, wówczas wykonywane sÈ metody __get()
i __set() tej klasy (przeznaczone odpowiednio do odczyty-
wania i ustawiania wïaĂciwoĂci), o ile metody takie istniejÈ.
4
A
I
Z
D
Z
O
R
I
)
E
N
W
E
R
K
O
P
A
N
E
I
N
D
A
G
A
Z
I
(
I
M
A
T
K
E
I
B
O
Z
A
C
A
R
P
144
Poleć książkęKup książkęKlonowanie obiektów
Klonowanie obiektów
$b = clone $a;
Przyjmijmy, ĝe zmiennej $a przypisano instancjÚ klasy.
Instrukcja przypisania $b = $a nie stworzy kopii instancji
$a, lecz zmiennej $b zostanie przypisane odwoïanie do $a.
WciÈĝ istnieÊ bÚdzie zatem tylko jedna instancja klasy.
AlternatywÈ jest udostÚpniane przez PHP sïowo kluczowe
clone, które sïuĝy do tworzenia kopii klasy:
$b = clone $a;
Czasami jednak nie chcemy tworzyÊ dokïadnych kopii klas.
Wyobraěmy sobie na przykïad, ĝe kaĝda instancja klasy za-
wiera globalnie unikatowy identyfikator GUID. Stworzony
klon instancji klasy mimo wszystko powinien posiadaÊ iden-
tyfikator GUID, który bÚdzie niepowtarzalny.
PHP pozwala na wstrzykiwanie kodu do obiektu, który
zostaï sklonowany. Jeĝeli klasa posiada metodÚ o nazwie
__clone(), zostanie ona wywoïana na sklonowanej in-
stancji klasy od razu po zakoñczeniu procesu klonowania.
Listing 4.8. Klonowanie obiektów (i zmiana ich zawartoĂci) (clone.php)
?php
class MyCloneableClass {
private $guid = null;
public function __construct() {
$this- guid = uniqid();
}
R
O
Z
D
Z
I
A
4
P
R
A
C
A
Z
O
B
I
E
K
T
A
M
I
(
I
Z
A
G
A
D
N
I
E
N
A
P
O
K
R
E
W
N
E
)
I
145
Poleć książkęKup książkęKlonowanie obiektów
public function __clone() {
$this- guid = uniqid();
}
public function getGuid() {
return $this- guid;
}
}
$c1 = new MyCloneableClass();
$c2 = clone $c1;
echo 1: , $c1- getGuid(), , 2: , $c2- getGuid();
?
Wynik wykonania kodu z listingu 4.8 bÚdzie podobny do
widocznego na rysunku 4.2: dwie instancje tej samej klasy
posiadajÈ róĝne identyfikatory GUID.
Rysunek 4.2. Dwie instancje tej samej klasy posiadajÈ róĝne
identyfikatory GUID
4
A
I
Z
D
Z
O
R
I
)
E
N
W
E
R
K
O
P
A
N
E
I
N
D
A
G
A
Z
I
(
I
M
A
T
K
E
I
B
O
Z
A
C
A
R
P
146
Poleć książkęKup książkęSerializacja i deserializacja obiektów
Serializacja i deserializacja
obiektów
public function __sleep() {
$this- db- close();
return array( guid );
}
public function __wakeup() {
$this- connectDb();
}
Gdy trzeba przechowywaÊ obiekty w celu ich wykorzysta-
nia w póěniejszym czasie, trzeba te obiekty przeksztaïciÊ do
takiej postaci, która pozwoli na ich zapisanie na przykïad
w bazie danych. PHP zapewnia co najmniej kilka mechani-
zmów, dziÚki którym instancjÚ obiektu moĝna przeksztaïciÊ
do postaci ciÈgu znaków (a potem stworzyÊ na powrót obiekt
w pierwotnej postaci). NajczÚĂciej uĝywanym rozwiÈzaniem
jest wykorzystanie funkcji serialize() i deserialize(),
z których bÚdÚ korzystaï równieĝ w kolejnych rozdziaïach
tej ksiÈĝki.
Z perspektywy programowania zorientowanego obiektowo
ciekawostkÈ jest to, ĝe proces serializacji i deserializacji moĝ-
na „przechwyciÊ”. Przyjmijmy na przykïad, ĝe klasa zawiera
wïaĂciwoĂÊ, która nie powinna (albo nie moĝe) byÊ seriali-
zowana, bo jest, dajmy na to, uchwytem bazy danych. Naj-
lepiej byïoby usunÈÊ tÚ wïaĂciwoĂÊ przed rozpoczÚciem
serializacji i odtworzyÊ w przypadku deserializacji.
R
O
Z
D
Z
I
A
4
P
R
A
C
A
Z
O
B
I
E
K
T
A
M
I
(
I
Z
A
G
A
D
N
I
E
N
A
P
O
K
R
E
W
N
E
)
I
147
Poleć książkęKup książkęSerializacja i deserializacja obiektów
Twórcy jÚzyka PHP zdecydowali siÚ uïatwiÊ tego typu zada-
nie i zaimplementowali dwie „magiczne” metody. Jeĝeli dana
klasa bÚdzie te metody implementowaÊ, zostanÈ one wywo-
ïane w odpowiednich okolicznoĂciach. Metodami tymi sÈ:
__sleep() — musi zwracaÊ tablicÚ ze wszystkimi
wïaĂciwoĂciami podlegajÈcymi serializacji; moĝe teĝ
czyĂciÊ serializowany obiekt.
__wakeup() — wywoïuje siÚ jÈ po wykonaniu seria-
lizacji; moĝna w niej na nowo definiowaÊ wïaĂciwoĂci.
Kod z listingu 4.9 stanowi typowÈ implementacjÚ mecha-
nizmów zamykania i resetowania poïÈczenia z bazÈ danych.
Po wykonaniu serializacji i deserializacji identyfikator GUID
pozostaje taki sam, natomiast poïÈczenie z bazÈ danych jest
ustanawiane na nowo.
Listing 4.9. Serializacja i deserializacja obiektów (serialize.php)
?php
class MySerializableClass {
public $guid = null;
public $db = null;
public function __construct() {
$this- guid = uniqid();
$this- connectDb();
}
private function connectDb() {
$this- db = new MySQLi( serwer , uĝytkownik ,
´ hasïo , bazadanych );
}
public function __sleep() {
$this- db- close();
return array( guid );
4
A
I
Z
D
Z
O
R
I
)
E
N
W
E
R
K
O
P
A
N
E
I
N
D
A
G
A
Z
I
(
I
M
A
T
K
E
I
B
O
Z
A
C
A
R
P
148
Poleć książkęKup książkęImplementowanie singletonów
}
public function __wakeup() {
$this- connectDb();
}
}
$c1 = new MySerializableClass();
echo Przed: , $c1- guid;
$s = serialize($c1);
$c2 = unserialize($s);
echo ; po: , $c2- guid;
?
UWAGA
Przed deserializacjÈ obiektu trzeba siÚ upewniÊ, ĝe dana kla-
sa istnieje. W przeciwnym wypadku PHP uĝyje do stworzenia
wyniku deserializacji „specjalnej” klasy o nazwie __PHP_
´Incomplete_Class_Name.
WSKAZÓWKA
PHP udostÚpnia caïe mnóstwo „magicznych” metod i funkcji. Peï-
na lista takich metod i funkcji znajduje siÚ w podrÚczniku on-
line, dostÚpnym pod adresem http://php.net/oop5.magic.
Implementowanie singletonów
if (self::$instance == null) {
self::$instance = new self;
}
return self::$instance;
R
O
Z
D
Z
I
A
4
P
R
A
C
A
Z
O
B
I
E
K
T
A
M
I
(
I
Z
A
G
A
D
N
I
E
N
A
P
O
K
R
E
W
N
E
)
I
149
Poleć książkęKup książkęImplementowanie singletonów
Równie czÚsto stosowanym, co krytykowanym wzorcem
projektowym jest wzorzec singleton. Implementacja sin-
gletonu nie jest prosta, dlatego poĂwiÚciïem mu oddzielny
punkt.
Gïównym celem singletonu jest to, aby niezaleĝnie od tego,
ile razy tworzy siÚ instancjÚ danej klasy, zawsze powstawaï
jeden obiekt. Takie rozwiÈzanie jest uĝyteczne na przykïad
w sytuacji, gdy tworzy siÚ poïÈczenie z bazÈ danych: czÚsto
wystarczy w caïym kodzie ěródïowym uĝywaÊ tylko jednego
poïÈczenia z bazÈ.
Standardowa implementacja singletonu w PHP opiera siÚ
na kilku mechanizmach programowania zorientowanego
obiektowo, których celem jest zapobieganie tworzeniu róĝ-
nych instancji jednej klasy. NajczÚĂciej konstruktor klasy
staje siÚ niedostÚpny przez zadeklarowanie go jako kon-
struktora prywatnego:
private function __construct() {
}
Jednym ze sposobów tworzenia dwóch instancji klasy jest
stworzenie jednej instancji i nastÚpnie jej sklonowanie.
Moĝna temu zapobiec przez zadeklarowanie magicznej
metody __clone() równieĝ jako metody prywatnej:
private function __clone() {
}
W takiej sytuacji nie moĝna juĝ stworzyÊ wiÚcej niĝ jednej
instancji tej samej klasy. Nie moĝna nawet stworzyÊ jednej
jej instancji. Dlatego trzeba zaimplementowaÊ metodÚ, która
4
A
I
Z
D
Z
O
R
I
)
E
N
W
E
R
K
O
P
A
N
E
I
N
D
A
G
A
Z
I
(
I
M
A
T
K
E
I
B
O
Z
A
C
A
R
P
150
Poleć książkęKup książkęImplementowanie singletonów
stworzy instancjÚ klasy. W kodzie klasy moĝna wywoïaÊ
jej konstruktor, poniewaĝ jest on zadeklarowany jako
private. Instancja klasy bÚdzie wówczas przechowywana
we wïaĂciwoĂci prywatnej i statycznej. Metoda odpowie-
dzialna za stworzenie instancji bÚdzie zatem najpierw spraw-
dzaÊ, czy instancja klasy jest juĝ przypisana wïaĂciwoĂci
statycznej. Jeĝeli tak, metoda zwróci tÚ instancjÚ. W prze-
ciwnym razie kod stworzy nowÈ, tylko jednÈ instancjÚ klasy:
static private $instance = null;
static public function getInstance() {
if (self::$instance == null) {
self::$instance = new self;
}
return self::$instance;
}
Kod z listingu 4.10 zawiera peïnÈ implementacjÚ klasy
singletonu.
Listing 4.10. Implementacja singletonu (singleton.php)
?php
class PHPSingleton{
static private $instance = null;
static public function getInstance() {
if (self::$instance == null) {
self::$instance = new self;
}
return self::$instance;
}
private function __construct() {
}
private function __clone() {
R
O
Z
D
Z
I
A
4
P
R
A
C
A
Z
O
B
I
E
K
T
A
M
I
(
I
Z
A
G
A
D
N
I
E
N
A
P
O
K
R
E
W
N
E
)
I
151
Poleć książkęKup książkęImplementowanie singletonów
}
}
?
UWAGA
Jak wspomniaïem juĝ wczeĂniej, wzorce singletonów majÈ pewne
wady. Przede wszystkim w przypadku korzystania z singleto-
nów kod staje siÚ trudniejszy do testowania, poniewaĝ klasa
singletonu musi byÊ klasÈ globalnÈ i nadaje stan aplikacji. Jak
zwykle w takich przypadkach, ostateczne rozwiÈzanie zaleĝy od
charakteru rozwiÈzywanego problemu.
Korzystanie z przestrzeni nazw
Jednym z waĝniejszych nowych mechanizmów dodanych do
PHP 5.3 jest obsïuga przestrzeni nazw. Przestrzenie nazw to narzÚ-
dzie, które sïuĝy do grupowania powiÈzanych ze sobÈ funkcji z jed-
noczesnym unikniÚciem konfliktów nazw. Wyobraěmy sobie, ĝe
implementowana jest funkcja o ogólnej nazwie showInfo().
Kolejny programista, który pracuje na tym samym projekcie, im-
plementuje innÈ funkcjÚ, ale nadaje jej tÚ samÈ nazwÚ. CzÚsto
w takiej sytuacji nazwÚ funkcji poprzedza siÚ jakimĂ przedrostkiem,
aby uczyniÊ jÈ unikatowÈ. W efekcie powstajÈ nieczytelne, zbyt
dïugie identyfikatory, na przykïad Projekt_Moduï_Podmoduï_
´showInfo(). Z pomocÈ w takich sytuacjach przychodzÈ prze-
strzenie nazw. Przy uĝyciu przestrzeni nazw wskazuje siÚ kontekst,
w danej przestrzeni nazw funkcja showInfo() jest unikatowa,
a inni programiĂci wykorzystujÈ inne przestrzenie nazw. W kon-
sekwencji dziÚki przestrzeniom nazw ïatwiej jest enkapsulowaÊ
konkretne rozwiÈzania.
4
A
I
Z
D
Z
O
R
I
)
E
N
W
E
R
K
O
P
A
N
E
I
N
D
A
G
A
Z
I
(
I
M
A
T
K
E
I
B
O
Z
A
C
A
R
P
152
Poleć książkęKup książkęImplementowanie singletonów
Sïowem kluczowym dla przestrzeni nazw jest sïowo namespace.
Sïowo to musi byÊ pierwszym poleceniem obecnym na stronie PHP
(mogÈ je poprzedzaÊ co najwyĝej komentarze, które sÈ opcjonalne);
nie moĝe przed nim wystÚpowaÊ nawet ĝaden znacznik jÚzyka
HTML. Aby stworzyÊ strukturÚ przestrzeni nazw, moĝna zdefiniowaÊ
hierarchiÚ, w której w roli separatora bÚdzie siÚ uĝywaÊ znaku
odwrotnego ukoĂnika:
namespace Projekt\Moduï\Podmoduï;
Tak zdefiniowana przestrzeñ nazw bÚdzie prawidïowo funkcjo-
nowaÊ w caïym pliku. Jeĝeli w pliku tym umieĂci siÚ implementacjÚ
metody showInfo() i plik ten doïÈczy siÚ do innego skryptu PHP,
wówczas metodÚ showInfo() bÚdzie moĝna wykonaÊ nastÚpujÈcÈ
instrukcjÈ:
Projekt\Moduï\Podmoduï\showInfo();
Aby w jednym pliku zdefiniowaÊ wiÚcej niĝ jednÈ przestrzeñ nazw,
moĝna wykonaÊ kilka instrukcji namespace. Zalecanym podejĂciem
jest jednak w takiej sytuacji zastosowanie nawiasów klamrowych:
namespace Przestrzeñnazw1 {
// ...
}
namespace Przestrzeñnazw2 {
// ...
}
W PHP istnieje kilka sposobów uĝywania przestrzeni nazw. Moĝna
oczywiĂcie podawaÊ w peïni kwalifikowanÈ nazwÚ przestrzeni nazw,
jak w przykïadzie. Dozwolone jest takĝe stosowanie nazw wzglÚd-
nych. W przypadku przestrzeni nazw o charakterze lokalnym
bardziej dogodnym podejĂciem jest stosowanie aliasów. Skïadnia
use przestrzeñnazw albo use przestrzeñnazw as
alias moĝe znaczÈco skróciÊ czas implementacji kodu i uïatwiÊ
R
O
Z
D
Z
I
A
4
P
R
A
C
A
Z
O
B
I
E
K
T
A
M
I
(
I
Z
A
G
A
D
N
I
E
N
A
P
O
K
R
E
W
N
E
)
I
153
Poleć książkęKup książkęStosowanie cech
korzystanie z przestrzeni nazw. Poniĝszy fragment kodu ilustruje
sposób, w jaki importuje siÚ przestrzeñ nazw:
import Projekt\Moduï\Podmoduï;
Podmoduï\showInfo();
Jeĝeli uĝyje siÚ aliasu, kod moĝe przybraÊ nastÚpujÈcÈ postaÊ:
import Projekt\Moduï\Podmoduï as Mod;
Mod\showInfo();
Na pierwszy rzut oka skorzystanie z wbudowanych klas PHP we-
wnÈtrz przestrzeni nazw moĝe budziÊ wÈtpliwoĂci, poniewaĝ inter-
preter bÚdzie szukaï wskazanych klas w bieĝÈcej przestrzeni nazw.
Wystarczy jednak poprzedziÊ nazwÚ klasy wbudowanej znakiem
odwrotnego ukoĂnika, który pozwala PHP poszukaÊ klasy na liĂcie
klas globalnych:
namespace Projekt\Moduï\Podmoduï;
$c = new \SoapClient( plik.wsdl );
Na temat przestrzeni nazw moĝna by mówiÊ jeszcze dïugo, jednak
ze wzglÚdu na formuïÚ tej ksiÈĝki skupiïem siÚ jedynie na sposobie
ich dziaïania (i to teĝ w duĝym skrócie). Zdecydowanie wiÚcej in-
formacji na temat przestrzeni nazw moĝna znaleěÊ w podrÚczniku
online, dostÚpnym pod adresem http://php.net/namespace.
Stosowanie cech
class MyTraitClass {
use MyTrait1, MyTrait2 {
MyTrait1::showTime as now;
MyTrait2::showCopyright insteadof MyTrait1;
}
}
4
A
I
Z
D
Z
O
R
I
)
E
N
W
E
R
K
O
P
A
N
E
I
N
D
A
G
A
Z
I
(
I
M
A
T
K
E
I
B
O
Z
A
C
A
R
P
154
Poleć książkęKup książkęStosowanie cech
Jednym z nowych rozwiÈzañ dodanych do PHP 5.4 jest ob-
sïuga tak zwanych cech (ang. trait), które stanowiÈ narzÚdzie
ponownego wykorzystania istniejÈcego kodu ěródïowego.
Cecha jest kolekcjÈ funkcji — swego rodzaju klasÈ, która
nie posiada instancji. Aby skorzystaÊ z nowego mechani-
zmu, trzeba najpierw stworzyÊ cechÚ, wykorzystujÈc do tego
celu sïowo kluczowe trait.
trait MyTrait1 {
public function showTime() {
$date = new DateTime( now );
echo $date- format( H:i:s );
}
}
NastÚpnie w kodzie klasy moĝna takie zdefiniowane cechy
ïadowaÊ przy uĝyciu sïowa kluczowego use. W ten sposób
metody stajÈ siÚ dostÚpne wewnÈtrz klasy:
class MyTraitClass {
use MyTrait1;
}
$c = new MyTraitClass();
$c- showTime();
W jednej klasie moĝna korzystaÊ z wiÚcej niĝ jednej cechy.
Trzeba jednak wówczas zwróciÊ szczególnÈ uwagÚ na to,
czy cechy te nie implementujÈ tych samych metod. W takiej
sytuacji zwrócony zostanie komunikat bïÚdu, podobny do
komunikatu rzucanego wtedy, gdy implementuje siÚ inter-
fejsy z metodami o takich samych nazwach. W przeciwieñ-
stwie do interfejsów cechy pozwalajÈ jednak zapobiegaÊ
tego typu bïÚdom. Gdy ïaduje siÚ cechÚ, potencjalne
konflikty nazw moĝna rozwiÈzywaÊ przy uĝyciu operatora
R
O
Z
D
Z
I
A
4
P
R
A
C
A
Z
O
B
I
E
K
T
A
M
I
(
I
Z
A
G
A
D
N
I
E
N
A
P
O
K
R
E
W
N
E
)
I
155
Poleć książkęKup książkęStosowanie cech
instanceof. Zaïóĝmy na przykïad, ĝe istniejÈ dwie cechy:
MyTrait1 i MyTrait2 i obydwie te cechy zawierajÈ definicjÚ
metody showtime(). Skïadnia przedstawiona poniĝej za-
pewni, ĝe ĝaden bïÈd siÚ nie pojawi oraz ĝe w kodzie uĝyta
zostanie implementacja metody showTime() pochodzÈca
z cechy MyTrait1 zamiast MyTrait2:
class MyTraitClass {
use MyTrait1, MyTrait2{
MyTrait1::showTime insteadof MyTrait2;
}
}
Innym rozwiÈzaniem jest zastosowanie aliasu, uĝycie sïowa
kluczowego as, a nawet skorzystanie w cesze z metod abs-
trakcyjnych. W kodzie widocznym na listingu 4.11 imple-
mentowane sÈ dwie cechy, wykorzystywany jest operator
insteadof oraz alias, a wynik dziaïania tego kodu znajduje
siÚ na rysunku 4.3.
Listing 4.11. Uĝycie dwóch cech (trait.php)
?php
trait MyTrait1 {
public function showTime() {
$date = new DateTime( now );
echo $date- format( H:i:s );
}
public function showCopyright() {
echo copy; Cecha 1 ;
}
}
trait MyTrait2 {
public function showCopyright() {
4
A
I
Z
D
Z
O
R
I
)
E
N
W
E
R
K
O
P
A
N
E
I
N
D
A
G
A
Z
I
(
I
M
A
T
K
E
I
B
O
Z
A
C
A
R
P
156
Poleć książkęKup książkęStosowanie cech
echo copy; Cecha 2 ;
}
}
class MyTraitClass {
use MyTrait1, MyTrait2 {
MyTrait1::showTime as now;
MyTrait2::showCopyright insteadof MyTrait1;
}
}
$c = new MyTraitClass();
$c- now();
echo hr / ;
$c- showCopyright();
?
Rysunek 4.3. W przykïadowym kodzie wykonana zostaïa metoda
drugiej cechy
R
O
Z
D
Z
I
A
4
P
R
A
C
A
Z
O
B
I
E
K
T
A
M
I
(
I
Z
A
G
A
D
N
I
E
N
A
P
O
K
R
E
W
N
E
)
I
157
Poleć książkęKup książkęStosowanie cech
4
A
I
Z
D
Z
O
R
I
)
E
N
W
E
R
K
O
P
A
N
E
I
N
D
A
G
A
Z
I
(
I
M
A
T
K
E
I
B
O
Z
A
C
A
R
P
158
Poleć książkęKup książkęSkorowidz
A
name, 166
value, 175
adres IP, 79
AES, Advanced Encryption
Standard, 31
Ajax, Asynchronous
JavaScript and XML, 382
Auth, 248
automatyczna lokalizacja dat,
103
automatyczne
generowanie WSDL, 379
ïadowanie klas, 143
algorytm
AES, 31
Bzip2, 277
DES, 31
MD5, 32
Quicksort, 81
SHA1, 32
algorytmy szyfrowania, 31
alias, 153
ASCII, 36
atak
przemierzania katalogów,
261
XSS, 26, 160
atrybut
action, 161
checked, 176, 179
enctype, 197
method, 197
B
baza danych
Firebird, 332
Microsoft SQL, 323
MySQL, 283
Oracle, 317
PostgreSQL, 311
SQLite, 300
biblioteka
FreeTDS, 330
jQuery, 388, 389
libmysql, 286
lib-mysqli.dll, 286
libxslt, 357
Poleć książkęKup książkęSkorowidz
biblioteka
PEAR, 205, 282, 342,
360, 389
PHP, 248
php_mysqli.dll, 286
php_sqlite.dll, 301
php_xsl.dll, 357
SPL, 94, 144
ZZIPlib, 276
bibliotki ICU, 84
blok CDATA, 346
blokowanie
plików, 258, 300
plików cookie, 221
C
cecha, trait, 155
CGI, Common Gateway
Interface, 247
ciÈg znaków
neutralizacja, 26
podciÈg, 35
porównywanie, 22
przeksztaïcanie
w datÚ, 115
w tablicÚ, 69
skanowanie, 41
suma kontrolna, 32
szyfrowanie, 30
weryfikacja loginów, 23
wielokrotne ïÈczenie, 39
wyszukiwanie, 44
zastÚpowanie, 56
I
Z
D
W
O
R
O
K
S
392
D
dane
BLOB, 309
dynamiczne, 190
JSON, 389
z formularza, 161, 169
data wygaĂniÚcia cookie, 216
Date, 129
Date_Holidays, 129
DB_DataObject, 342
debugowanie, 43
DES, Data Encryption
Standard, 30
dokument RFC, 366
DOM, Document Object
Model, 349, 351
dopisywanie danych do pliku,
257
dostÚp do
biblioteki ZZIPlib, 276
MySQL, 284
obiektów danych PHP, 337
pliku, 200, 253, 259, 261
PostgreSQL, 311
tablic, 162
DSN, Data Source Name, 339
dyrektywa
include_path, 262
open_basedir, 262
session.auto_start, 234
session.save_path, 230
session.user_trans_sid, 232
upload_tmp_dir, 200
dziedziczenie, 134
Poleć książkęKup książkę
E
element
form , 161
option , 179
blockquote, 66
elementy formatujÈce, 28
F
File, 282
File_Find, 282
File_SearchReplace, 282
filtrowanie tablic, 89
filtry weryfikacji, 192
format
Bzip2, 279
CSV, 70, 262
GMT, 128
INI, 267
XML, 346
formatowanie daty, 108
formularz HTML, 159
odczytywanie danych, 162
weryfikacja danych, 185
wybieranie daty, 121
wysyïanie danych, 161
wysyïanie pliku, 203
zapisywanie danych, 166
zapisywanie do pliku, 193
FTP, File Transfer Protocol,
250, 362
funkcja
bzclose(), 279
addslashes(), 326
array_filter(), 90
array_map(), 86
Skorowidz
array_rand(), 91
array_walk(), 88
arsort(), 74
asort(), 74
basename(), 260
bzopen(), 279
bzwrite(), 279
checkdate(), 111
chr(), 38
compareChar(), 84
copy(), 273
count(), 62
crypt(), 30, 34
date(), 98, 101
date_sunrise(), 117
date_sunset(), 117
DateTime
createFromFormat(), 111
deserialize(), 147
dirname(), 260
each(), 62
echo(), 43
explode(), 70
fgetcsv(), 263
fgets(), 256
file(), 255
file_exists(), 254
file_get_bzip2_contents(),
file_get_contents(), 255,
276, 365
file_put_contents(), 258,
279
276
filter_input(), 191
filter_var(), 192
flock(), 258
fopen(), 250, 252
fputcsv(), 265
S
K
O
R
O
W
D
Z
I
393
Poleć książkęKup książkęSkorowidz
funkcja
fsockopen(), 363
ftp_chdir(), 366
ftp_close(), 366
ftp_connect(), 366
ftp_get(), 366
ftp_login(), 366
getCookieData(), 168
getFormDataGET(), 172
getFormDataPOST(), 172
gettimeofday(), 118
gmdate(), 128
gmmktime(), 128
gmstrftime(), 128
header(), 223
htmlentities(), 27
htmlspecialchars(), 26, 85,
169, 190
ibase_fetch_assoc(), 336
ibase_prepare(), 334
ibase_query(), 334
implode(), 71, 255
is_array(), 67
is_numeric(), 53
isset(), 186
json_encode(), 387
ksort(), 73
list(), 68
md5_file(), 35
mktime(), 109
move_uploaded_file(), 200
mssql_fetch_assoc(), 331
mssql_fetch_object(), 331
mssql_fetch_row(), 331
mssql_select_db(), 331
mysqli_close(), 287
mysqli_commit(), 297
mysqli_connect(), 286
I
Z
D
W
O
R
O
K
S
394
mysqli_fetch_assoc(), 293
mysqli_fetch_object(), 293
mysqli_fetch_row(), 293
mysqli_insert_id(), 296
mysqli_prepare(), 291
mysqli_query(), 288
mysqli_rollback(), 297
mysqli_select_db(), 287
mysqli_stmt_execute(), 291
natcasesort(), 80
natsort(), 80
nl2br(), 29
oci_bind_by_name(), 320
oci_connect(), 317
oci_execute(), 319
oci_fetch_all(), 321
oci_fetch_assoc(), 321
oci_fetch_object(), 321
oci_fetch_row(), 321
oci_parse(), 319
ord(), 38
parse_ini_file(), 268
pg_connect(), 311
pg_escape_string(), 312
pg_fetch_all(), 316
pg_fetch_assoc(), 316
pg_fetch_object(), 316
pg_fetch_row(), 316
pg_insert(), 314
pg_query(), 312
pg_update(), 314
preg_match(), 48
preg_match_all(), 48
preg_replace(), 56
print(), 43
print_r(), 65
printf(), 39
rename(), 273
Poleć książkęKup książkę
Skorowidz
funkcja
sajax_show_javascript(),
strftime(), 103–105, 109
strip_tags(), 28
strlen(), 38
strnatcmp(), 83
strpos(), 44
strrpos(), 44
strtolower(), 24
strtotime(), 115
strtoupper(), 24
substr(), 35
time(), 125, 216
trim(), 51
unlink(), 273
urlencode(), 27, 214
usort(), 81
var_dump(), 43
var_export(), 43
vprintf(), 41, 42
vsprintf(), 41
xml_parser_create(), 345
anonimowe, 87
obsïugi daty i czasu, 97
sprawdzajÈce typ danych,
52
uchwytów, 346
wbudowane ftp, 367
zwracajÈce informacje o
plikach, 270
funkcje
G
generowanie
liczb, 54
WSDL, 379
gniazdko, 363
graficzne przyciski wysyïania
danych, 184
S
K
O
R
O
W
D
Z
I
384
237
239
serialize(), 147
session_destroy(), 236
session_id(), 237
session_regenerate_id(),
session_set_save_handler(),
session_start(), 234
setcookie(), 212, 222
setlocale(), 105
setrawcookie(), 214
sha1_file(), 35
showInfo(), 152
shuffle(), 92
simplexml_load_file(), 355
sort(), 72
spl_autoload_register(),
142
sprintf(), 41
sqlite_escape_string(), 304
sqlite_exec(), 303, 306
sqlite_fetch_all(), 306
sqlite_fetch_array(), 306
sqlite_fetch_object(), 306
sqlite_open(), 301
sqlite_query(), 306
sqlsrv_connect(), 324
sqlsrv_fetch_array(), 327
sqlsrv_fetch_object(), 328
sqlsrv_prepare(), 329
sqlsrv_query(), 325
sscanf(), 42
str_replace(), 57
strcasecmp(), 23
strcmp(), 23
395
Poleć książkęKup książkęSkorowidz
H
hash, 32
hasïo, 24, 33
HTML_QuickForm2, 205
HTTP, Hypertext Transfer
Protocol, 249, 362
HTTP_Header, 389
HTTP_Request2, 389
HTTP_Server, 389
HTTP_Session, 248
HTTP_Upload, 205
HTTPS, 364
I
identyfikator
GUID, 145
sesji, 231
IIS, Internet Information
Services, 253
implementacja
klasy, 133
singletonu, 149
informacje o plikach, 269
instrukcje MySQL, 290
interfejs, 136
ArrayAccess, 94
ArrayObject, 95
Countable, 94
Iterable, 95
interwaï czasu, 126
I
Z
D
W
O
R
O
K
S
J
jÚzyk
SQL, 283
XML, 343, 356
396
JSON, JavaScript Object
Notation, 386
K
klasa, 132
__PHP_Incomplete_Class
_Name, 149
Ctrx_SOAP_AutoDiscover
, 380
DateInterval, 126, 127
DateTime, 102, 126
dir, 273
klasy
abstrakcyjne, 136, 138
bazowe, 135
poĂredniczÈce, proxy
class, 377
potomne, 134
klient JSON, 388
klonowanie obiektów, 145
kod
HTML, 27
JavaScript, 26, 218
kodowanie znaków, 160
kompresja pliku, 279
komunikat o bïÚdzie, 373
konstruktor prywatny, 150
kopiowanie plików, 272
L
lista HTML, 347
listy
wielokrotnego wyboru,
180, 182
wyboru, 178
Poleć książkęKup książkę
Skorowidz
logowanie, 25
losowanie elementów, 91
ïÈczenie siÚ z serwerami
FTP, 365
HTTP, 361
M
MDB_QueryTool, 342
MDB2, 342
mechanizm zarzÈdzania
sesjami, 240
metoda
__call(), 144
__clone(), 145, 150
__construct(), 132
__get(), 144
__set(), 144
__sleep(), 148
__wakeup(), 148
add(), 126
addFunction(), 379
bindValue(), 309
createElement(), 352
diff(), 126
exec(), 304
fetch(), 341
fetchAll(), 341
file_put_contents(), 365
GET, 25, 159
getElementById(), 350
getElementsByTagname(),
350
getProxy(), 377
getTime(), 218
handle(), 379
importStylesheet(), 357
loadXML(), 350
open(), 302
POST, 25
query(), 340
read(), 348
save(), 352
setClass(), 380
showtime(), 156
sub(), 126
transformToDoc(), 357
validate(), 359
xpath(), 356
metody
abstrakcyjne, 137
finalne, 141
model DOM, 349
modyfikator
+, 251
b, 251
t, 251
N
S
K
O
R
O
W
D
Z
I
narzÚdzia Sajax, 383
narzÚdzie Webservice Helper,
380
nawiasy kwadratowe, 181
nazwa uĝytkownika, 24
Net_FTP, 389
Net_Socket, 389
neutralizacja
ciÈgów znaków, 26
danych wynikowych, 190
znaków specjalnych, 325
397
Poleć książkęKup książkęSkorowidz
niejawna konwersja typów, 22
NuSOAP, 372–376, 380
otwieranie
bazy danych SQLite3, 302
pliku, 250
O
P
obliczanie
obsïuga
daty wzglÚdnej, 112
róĝnicy miÚdzy datami, 124
pakiet
odczytywanie danych z
337–341
domen TLD, 222
plików, 249
plików cookie, 223
protokoïu FTP, 366
sesji, 230, 234
XPath, 356
ochrona adresów poczty, 37
odczytywanie
i zapisywanie sesji, 234
informacji o pliku, 196
zawartoĂci katalogu, 273
zawartoĂci tablic, 61,
63, 65
InterBase/Firebird, 335
Oracle, 320
PostgreSQL, 315
plików cookie, 171, 215
pliku, 255
MSSQL, 327–329
MySQL, 292
SQLite3, 305
operator
==, 22
===, 22
instanceof, 350
opis WSDL, 381
HTML_QuickForm2, 205
HTTP_Header, 389
HTTP_Request2, 389
HTTP_Server, 389
HTTP_Upload, 205
Net_FTP, 389
Net_Socket, 389
parser
SAX, 345
XMLReader, 348
parsowanie
danych XML, 345, 349,
354
plików INI, 267
PDO, PHP Data Object,
PECL, PHP Extension
Community Library, 301
pÚtla
plik
for, 62
foreach, 62, 64
while, 69, 293
AddService.wsdl, 380
check.inc.php, 51
check.php, 51
getFormData. inc.php, 181
getFormData.inc.php, 179
mutlilingual.php, 229
nusoap.php, 372
I
Z
D
W
O
R
O
K
S
398
Poleć książkęKup książkę
Skorowidz
pliki
php.ini, 268
quotes.xsl, 357
README, 366
select-multiple.php, 182
.htacces, 246
Bzip2, 278
cookie, 166, 208–229
data wygaĂniÚcia, 211,
215
ustawianie domeny, 220
usuwanie, 219
zapisywanie danych,
poïÈczenie za poĂrednictwem
PDO, 337
pomiar wydajnoĂci, 119
porównywanie elementów
tablicy, 72
postÚp wysyïania pliku, 201
poziomy widocznoĂci, 133
program
pgAdmin, 311
phpPgAdmin, 311
TAR, 276
programowanie zorientowane
obiektowo, 131
protokóï
224
CSV, 265
DTD, 359
INI, 267
rng, 358
WSDL, 377
XML, 359
xsd, 358
XSLT, 357
ZIP, 274
pola formularza, 165
obowiÈzkowe, 185
opcji, 175
tekstowe, 173
wyboru, 177
polecenie
INSERT, 296
SELECT, 293
poïÈczenie z
Oracle, 316
MySQLi, 285
PostgreSQL, 310
InterBase/Firebird, 332
MSSQL, 322, 324
SQLite, 300
S
K
O
R
O
W
D
Z
I
FTP, 362
HTTP, 207, 362
HTTPS, 364
SMTP, 370
SOAP, 370
UDP, 370
XML-RPC, 369
przechowywanie danych sesji,
238
przechwytywanie bïÚdów, 381
przeksztaïcanie typów
danych, 53
przenoszenie plików, 199
przestrzenie nazw, 152
R
relacyjna baza danych, 284
repozytorium
PEAR, 129
Subversion, 372
REST, Representational
State, 370
399
Poleć książkęKup książkęSkorowidz
rÚczna lokalizacja dat, 107
RFC, Request For Comment,
PostgreSQL, 311
sesje, 229–247
366
279
rozpakowywanie pliku, 277,
rozpoczynanie sesji, 233
rozpoznawanie jÚzyka
uĝytkownika, 227
rozszerzenie
DOM, 350
ext/mssql, 323
ext/sqlite, 301
ext/sqlite3, 302
ext/sqlsrv, 329
ext_sqlite3, 309
filter, 191
ibase, 332
ieHTTPHeaders, 210
LiveHTTPHeaders, 210
NuSOAP, 379
php_pgsql.dll, 311
SimpleXML, 354
SOAP, 378, 381
S
SAX, Simple API for XML,
345
serializacja obiektów, 147
serwer
Apache, 253
Firebird, 332
FTP, 365
HTTP, 362
Microsoft IIS, 253
MSSQL, 323, 331
MySQL, 285
czyszczenie, 239
identyfikator, 231
mechanizm zarzÈdzania,
238
niszczenie, 239
odczytywanie, 234
otwieranie, 233
zamykanie, 235
zapisywanie, 234
zmiana identyfikatora,
236
SimpleXML, 354, 356
singleton, 150
skanowanie ciÈgów znaków,
42
skrypt
login.php, 244
mod_files.sh, 231
setcookie-specific.php,
218
sïowo kluczowe
$this, 132
as, 156
clone, 145
extends, 134
final, 141
global, 163
implements, 139
namespace, 153
new, 132
parent, 135
static, 134
trait, 155
use, 155
SOAP, 370, 378
I
Z
D
W
O
R
O
K
S
400
Poleć książkęKup książkę
Skorowidz
sól, 31
spam, 38
specyfikacja
144
sprawdzanie
danych
HTML, 161
plików cookie, 209
SPL, Standard PHP Library,
sortowanie
adresów IP, 79
dowolnych wartoĂci, 81
naturalne, 80
numeryczne, 80
tablicy ze znakami
narodowymi, 82
zagnieĝdĝonych tablic
asocjacyjnych, 77
zawartoĂci tablic, 71
asocjacyjnych, 73
zagnieĝdĝonych, 75
uwierzytelniajÈcych, 244
identyfikatora, 295
konfiguracji obsïugi
plików cookie, 223, 226
list wyboru, 187
list wielokrotnego
wyboru, 189
pól obowiÈzkowych, 185
stanu serwera, 367
uwierzytelnienia, 243
zawartoĂci tablicy
$_COOKIE, 223
staïa __FILE__, 260
staïe, 191
sterownik mysqlnd, 286
sterowniki dla serwerów, 337
Stream_Var, 282
strumienie PHP, 275
suma kontrolna, 32
symbole
formatujÈce dla
funkcji date(), 98
funkcji strftime(), 104
klasy DateInterval, 127
zastÚpcze, 40, 319
system phpMyAdmin, 284
szyfrowane hasïa, 29
Ăcieĝka
pliku cookie, 228
wzglÚdna, 259
Ăledzenie stanu wysyïania, 202
¥
T
tabela quotes, 284
tablica
$_COOKIE, 171, 215
$_FILES, 163, 197
$_GET, 163
$_POST, 163
$_REQUEST, 163
$_SESSION, 202, 234
$HTTP_GET_VARS, 162
$HTTP_POST_VARS,
162
162
$HTTP_REQUEST_VARS,
filtrowanie, 89
losowanie, 92
odczytywanie zawartoĂci,
61, 63, 65
S
K
O
R
O
W
D
Z
I
401
Poleć książkęKup książkęSkorowidz
tablica
przeksztaïcanie
zawartoĂci, 68
85
tablice
sortowanie, 71, 73
asocjacyjne, 59, 293
numeryczne, 59
superglobalne, 163
zagnieĝdĝone, 65
technologia Ajax, 382
transakcje, 296
tryb
autozatwierdzania, 297
plikowy, 333
serwerowy, 333
tryby otwarcia pliku, 252
tworzenie
danych XML, 352
klasy, 94
kodu XML, 351
pliku cookie, 212
pliku relaxNG, 359
sesji, 230
tablicy, 59
usïugi sieciowej, 372, 378
znacznika czasu, 113
typy
blokad, 258
danych, 309
usïugi sieciowe, Web Services,
przeksztaïcenie w ciÈg
znaków, 70
przetwarzanie elementów,
343, 369, 377, 381
SOAP, 372
z WSDL, 374, 380
U
W
usuwanie
danych sesji, 235
plików, 272
plików cookie, 219
znaczników HTML, 26
uwierzytelnianie, 243, 246,
247
wartoĂci predefiniowane,
169, 173
wartoĂÊ mieszajÈca, 32
weryfikowanie
adresów poczty, 54
danych, 185
danych XML, 358
daty, 111
hasïa, 29, 31, 33
pól formularza, 51
typów danych, 52
wÚzeï, 350
WSDL, Web Services
Description Language, 371,
374, 380
wskaěnik do zbioru wyników,
292
wstrzykniÚcie kodu, 145
JavaScript, 26
SQL, 289
I
Z
D
W
O
R
O
K
S
402
Poleć książkęKup książkę
Skorowidz
wykonywanie
instrukcji SQLite, 308
polecenia SQL za
poĂrednictwem PDO,
339
transakcji, 296
wyïÈczanie tablicy, 163
wymiana danych, 386
wyniki zapytania, 340
wyodrÚbnianie podciÈgu, 35
wyraĝenia regularne PCRE,
45, 48, 56
wysyïanie
danych, 184, 195
metoda GET, 208
metoda POST, 208
nagïówek HTTP, 208
formularza, 164
plików, 161, 202
pliku do klienta, 280
poleceñ SQL, 288
MSSQL, 325
InterBase/Firebird, 333
Oracle, 318
PostgreSQL, 312
SQLite, 303
SQLite3, 304
wyszukiwanie znaczników, 49
wyĂwietlanie
elementów tablicy, 89
zawartoĂci zagnieĝdĝonych
tablic, 67
X
XML, extensible Markup
Langua
Pobierz darmowy fragment (pdf)