Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00483 010707 20685013 na godz. na dobę w sumie
PHP i MySQL. Rozmówki - książka
PHP i MySQL. Rozmówki - książka
Autor: Liczba stron: 408
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-7023-9 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> bazy danych >> mysql - programowanie
Porównaj ceny (książka, ebook, audiobook).

Przydatny kod zawsze pod ręką!

PHP i MySQL to niewątpliwie najpopularniejszy duet do tworzenia dynamicznych witryn WWW i aplikacji internetowych. Jego popularność jest wynikiem połączenia ogromnych możliwości, przystępności oraz bezpłatnego dostępu do obu narzędzi. PHP i MySQL sprawdzą się w wielu zastosowaniach - od prostych skryptów, przez systemy do zarządzania treścią na stronach WWW, aż po sklepy internetowe oraz zaawansowane serwisy.

W tej książce znajdziesz dziesiątki przykładowych fragmentów kodu, które możesz od ręki wykorzystać do swoich potrzeb. Operacje na ciągach znaków i tablicach, formatowanie dat czy przetwarzanie formularzy to tylko niektóre z poruszanych tu obszarów. Ponadto Twoją ciekawość powinien wzbudzić rozdział poświęcony programowaniu obiektowemu, korzystaniu z sesji oraz nawigowaniu po systemie plików na serwerze. W każdym z poruszanych tematów znajdziesz odwołania do repozytorium PEAR, którego zawartość pomoże Ci wiele problemów rozwiązać znacznie lepiej i szybciej. Tę książkę każdy programista PHP powinien mieć zawsze pod ręką!

Dzięki niej:

Skorzystaj ze sprawdzonych rozwiązań!

Znajdź podobne książki Ostatnio czytane w tej kategorii

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)

Gdzie kupić całą publikację:

PHP i MySQL. Rozmówki
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: