Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00535 010065 11029920 na godz. na dobę w sumie
PHP5. Programowanie - książka
PHP5. Programowanie - książka
Autor: , , Liczba stron: 496
Wydawca: Helion Język publikacji: polski
ISBN: 83-246-0613-0 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> php - programowanie
Porównaj ceny (książka, ebook, audiobook).

Dostępny nieodpłatnie PHP to jeden z najpopularniejszych języków programowania, dzierżący jednocześnie palmę pierwszeństwa wśród technologii wykorzystywanych do tworzenia dynamicznych witryn WWW i aplikacji internetowych. Według oficjalnych statystyk użyto go do napisania ponad 40% wszystkich aplikacji internetowych i zainstalowano na ponad 22 milionach serwerów. Źródłem jego popularności jest przede wszystkim jasna i czytelna składnia, ogromne możliwości, szybkość i wydajność oraz mnogość potencjalnych zastosowań. Najnowsze wcielenie PHP, oznaczone cyfrą 5, to w pełni obiektowy język programowania, który nadal zachował swoją prostotę i czytelność.

'PHP. Programowanie' to podręcznik przedstawiający wszystkie tajniki języka PHP5. W jasny i zwięzły sposób opisuje jego składnię oraz techniki programistyczne wykorzystywane przy tworzeniu aplikacji internetowych. Czytając go, poznasz zasady programowania obiektowego w PHP5, dowiesz się, w jaki sposób korzystać z informacji zapisanych w bazach danych, generować z poziomu skryptów pliki graficzne i dokumenty PDF oraz przetwarzać pliki XML. Każde z zagadnień zostało zilustrowane przykładami i wskazówkami pochodzącymi z najlepszego źródła, jest nim twórca języka PHP, Rasmus Lerdorf. Cennym dodatkiem do książki jest alfabetyczne zestawienie wszystkich funkcji PHP.

W książce poruszono między innymi:

Przekonaj się, dlaczego PHP jest tak niezwykle popularny
i dołącz do grona jego użytkowników.

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

Darmowy fragment publikacji:

PHP5. Programowanie Autorzy: Rasmus Lerdorf, Kevin Tatroe, Peter MacIntyre T‡umaczenie: Ma‡gorzata Czart, £ukasz Piwko, Konrad Wo(cid:156) ISBN: 978-83-246-0613-9 Tytu‡ orygina‡u: Programming PHP, Second Edition Format: B5, stron: 496 DostŒpny nieodp‡atnie PHP to jeden z najpopularniejszych jŒzyk(cid:243)w programowania, dzier¿„cy jednocze(cid:156)nie palmŒ pierwszeæstwa w(cid:156)r(cid:243)d technologii wykorzystywanych do tworzenia dynamicznych witryn WWW i aplikacji internetowych. Wed‡ug oficjalnych statystyk u¿yto go do napisania ponad 40 wszystkich aplikacji internetowych i zainstalowano na ponad 22 milionach serwer(cid:243)w. Źr(cid:243)d‡em jego popularno(cid:156)ci jest przede wszystkim jasna i czytelna sk‡adnia, ogromne mo¿liwo(cid:156)ci, szybko(cid:156)(cid:230) i wydajno(cid:156)(cid:230) oraz mnogo(cid:156)(cid:230) potencjalnych zastosowaæ. Najnowsze wcielenie PHP, oznaczone cyfr„ 5, to w pe‡ni obiektowy jŒzyk programowania, kt(cid:243)ry nadal zachowa‡ swoj„ prostotŒ i czytelno(cid:156)(cid:230). (cid:132)PHP. Programowanie(cid:148) to podrŒcznik przedstawiaj„cy wszystkie tajniki jŒzyka PHP5. W jasny i zwiŒz‡y spos(cid:243)b opisuje jego sk‡adniŒ oraz techniki programistyczne wykorzystywane przy tworzeniu aplikacji internetowych. Czytaj„c go, poznasz zasady programowania obiektowego w PHP5, dowiesz siŒ, w jaki spos(cid:243)b korzysta(cid:230) z informacji zapisanych w bazach danych, generowa(cid:230) z poziomu skrypt(cid:243)w pliki graficzne i dokumenty PDF oraz przetwarza(cid:230) pliki XML. Ka¿de z zagadnieæ zosta‡o zilustrowane przyk‡adami i wskaz(cid:243)wkami pochodz„cymi z najlepszego (cid:159)r(cid:243)d‡a, jest nim tw(cid:243)rca jŒzyka PHP, Rasmus Lerdorf. Cennym dodatkiem do ksi„¿ki jest alfabetyczne zestawienie wszystkich funkcji PHP. W ksi„¿ce poruszono miŒdzy innymi: (cid:149) StrukturŒ leksykaln„ PHP (cid:149) Przetwarzanie ‡aæcuch(cid:243)w znakowych i korzystanie z wyra¿eæ regularnych (cid:149) Programowanie obiektowe (cid:149) Zarz„dzanie sesjami i po‡„czeniami HTTP (cid:149) Komunikacja z bazami danych (cid:149) Przetwarzanie grafiki (cid:149) Korzystanie z plik(cid:243)w XML (cid:149) Zabezpieczanie aplikacji (cid:149) Tworzenie rozszerzeæ dla PHP (cid:149) Programowanie w PHP dla Windows Przekonaj siŒ, dlaczego PHP jest tak niezwykle popularny i do‡„cz do grona jego u¿ytkownik(cid:243)w Wydawnictwo Helion ul. Ko(cid:156)ciuszki 1c 44-100 Gliwice tel. 032 230 98 63 e-mail: helion@helion.pl Spis treści Słowo wstępne ...............................................................................................................7 Przedmowa .....................................................................................................................9 1. Wprowadzenie do PHP ................................................................................................. 15 15 16 20 22 Co robi PHP? Krótka historia PHP Instalowanie PHP Przegląd możliwości PHP 2. Podstawy języka ........................................................................................................... 31 31 36 43 47 59 66 67 Struktura leksykalna Typy danych Zmienne Wyrażenia oraz operatory Instrukcje sterujące Dołączanie kodu Osadzanie PHP na stronach WWW 3. Funkcje ........................................................................................................................... 71 71 72 74 76 79 79 80 Wywoływanie funkcji Definiowanie funkcji Zasięg zmiennych Parametry funkcji Wartości zwracane Zmienne funkcje Funkcje anonimowe 4. Łańcuchy ........................................................................................................................81 81 84 88 Cytowanie stałych łańcuchowych Wyświetlanie łańcuchów Uzyskiwanie dostępu do poszczególnych znaków 3 Porządkowanie łańcuchów Kodowanie i znaki specjalne Porównywanie łańcuchów Modyfikowanie oraz przeszukiwanie łańcuchów Wyrażenia regularne Wyrażenia regularne typu POSIX Wyrażenia regularne typu Perl 88 90 95 98 104 107 111 5. Tablice .......................................................................................................................... 123 123 124 124 126 127 130 131 136 141 142 Tablice indeksowane kontra tablice asocjacyjne Identyfikacja elementów tablicy Przechowywanie danych w tablicach Tablice wielowymiarowe Wydobywanie wartości wielokrotnych Konwertowanie między tablicami a zmiennymi Działania na tablicach Sortowanie Działanie na całych tablicach Zastosowanie tablic 6. Obiekty ........................................................................................................................145 146 146 147 148 153 158 Terminologia Tworzenie obiektu Dostęp do właściwości i metod Deklarowanie klasy Introspekcja Serializacja 7. Techniki sieciowe ........................................................................................................163 163 164 165 166 179 182 191 Podstawy protokołu HTTP Zmienne Informacje serwera Przetwarzanie formularzy Ustawianie nagłówków odpowiedzi Podtrzymywanie stanu SSL 8. Bazy danych ................................................................................................................193 193 195 196 201 207 Uzyskiwanie dostępu do bazy danych za pomocą PHP Relacyjne bazy danych i SQL Podstawy PEAR DB Zaawansowane techniki bazodanowe Przykładowa aplikacja 4 | Spis treści 9. Grafika ......................................................................................................................... 219 219 220 221 221 226 228 231 232 Osadzanie obrazków na stronie Rozszerzenie GD Podstawowe pojęcia graficzne Tworzenie i rysowanie obrazków Obrazki z tekstem Dynamicznie generowane przyciski Skalowanie obrazków Kolory 10. PDF ...............................................................................................................................237 237 237 239 Rozszerzenia PDF Dokumenty i strony Tekst 11. XML .............................................................................................................................. 251 251 253 254 265 265 266 268 XML — szybkie wprowadzenie Generowanie XML Analiza składni XML Analiza składni XML za pomocą DOM Analiza składni XML za pomocą SimpleXML Transformacja XML za pomocą XSLT Usługi sieciowe 12. Bezpieczeństwo ..........................................................................................................273 273 277 280 281 282 283 285 287 287 287 Filtruj dane wejściowe Unikanie znaków w wysyłanych danych Cross-Site Scripting Session Fixation Ładowanie plików Dostęp do plików Kod PHP Polecenia powłoki Więcej informacji Powtórzenie 13. Techniki aplikacji ........................................................................................................ 289 289 290 292 295 299 Biblioteki kodu Systemy szablonów Obsługa danych wychodzących Obsługa błędów Poprawianie wydajności Spis treści | 5 14. Rozszerzanie PHP .......................................................................................................307 307 308 309 317 320 322 326 329 332 333 336 337 339 340 Przegląd architektury Co będzie potrzebne Tworzymy pierwsze rozszerzenie Plik config.m4 Zarządzanie pamięcią Typ pval/zval Obsługa parametrów Zwracanie wartości Referencje Zmienne globalne Tworzenie zmiennych Wpisy INI rozszerzenia Zasoby Co dalej 15. PHP w Windows ..........................................................................................................341 341 344 347 353 Instalacja i konfiguracja PHP pod Windows Pisanie przenośnego kodu dla Windows i Uniksa Łączenie za pomocą COM Interakcja ze źródłami danych ODBC A Opis funkcji ..................................................................................................................357 B Przegląd rozszerzeń .................................................................................................. 463 Skorowidz ....................................................................................................................475 6 | Spis treści ROZDZIAŁ 3. Funkcje Funkcja to nazwany blok kodu wykonujący określone zadanie, najprawdopodobniej działający na zestawie przekazanych mu wartości zwanych parametrami i najprawdopodobniej zwracający jedną wartość. Funkcje zmniejszają ilość czasu potrzebną na wykonanie kompilacji, ponieważ niezależnie od tego, ile razy są wywoływane, są kompilowane tylko raz dla danej strony. Zwięk- szają one również niezawodność, gdyż pozwalają na korektę dowolnego błędu w pojedynczym miejscu zamiast we wszystkich, w których wykonywane jest dane zadanie. Zwiększają również czytelność poprzez odizolowanie kodu, który wykonuje określone zadania. W tym rozdziale zostaną przedstawione składnia wywołań funkcji i definicje funkcji, jak rów- nież omówione będą sposoby wykorzystywania zmiennych w funkcjach i przekazywania warto- ści do funkcji (zarówno przekazywanie przez wartość, jak i przekazywanie przez referencję). Znajdziemy tu również opis zmiennych funkcji oraz funkcji anonimowych. Wywoływanie funkcji Funkcje w programie PHP mogą być wbudowane (lub efektywnie wbudowane poprzez umiesz- czenie w rozszerzeniu) lub definiowane przez użytkownika. Niezależnie od ich pochodzenia wszystkie są używane jednakowo: $jakaś_wartość = nazwa_funkcji( [ parametr, ... ] ); Liczba parametrów wymaganych przez funkcję jest różna w zależności od konkretnej funkcji (a może nawet różnić się dla tej samej funkcji). Parametrami dostarczanymi funkcji mogą być dowolne poprawne wyrażenia, ale powinny one występować w konkretnej, oczekiwanej przez funkcję kolejności. Informacje na temat parametrów wymaganych przez funkcję oraz wartości, które mogą zostać zwrócone, znajdują się w dokumentacji funkcji. Poniżej znajduje się kilka przykładów funkcji: // strlen() to wbudowana funkcja zwracająca długość łańcucha $length = strlen( PHP ); // $length wynosi obecnie 3 // sin() i asin() to funkcje matematyczne sinus i arcus sinus $result = sin(asin(1)); // $result to sinus z arcsin(1), lub 1.0 // unlink() kasuje plik $result = unlink( functions.txt ); // false jeżeli zakończona niepowodzeniem 71 W pierwszym przykładzie jest przekazywany argument PHP do funkcji strlen(), która podaje nam liczbę znaków w danym łańcuchu. W opisywanym tutaj przypadku zwracana jest war- tość 3, która zostaje przypisana do zmiennej $length. Jest to najprostszy i najczęściej spotykany sposób używania funkcji. W drugim przykładzie rezultat asin(1) jest przekazywany do funkcji sin(). Z uwagi na to, że funkcje sinus i arcus sinus są dla siebie odwrotnymi, wyliczanie sinusa z arcusa sinusa dla jakiej- kolwiek wartości zawsze zwróci tę samą wartość. W cytowanym przykładzie widzimy, że funk- cja może być wywoływana wewnątrz innej funkcji. Zwrócona wartość wewnętrznego wywołania jest następnie wysyłana do funkcji zewnętrznej, po czym rezultat końcowy zostaje zwrócony i zachowany w zmiennej $result. W trzecim przykładzie funkcji unlink() podawana jest nazwa pliku, który ma zostać skasowany. Podobnie jak wiele innych funkcji, w przypadku niepowodzenia zwraca ona false. Pozwala to na użycie innej wbudowanej funkcji o nazwie die() oraz uproszczonego przetwarzania przez PHP zapisu operatorów logicznych. W takim wypadku można byłoby zapisać omawiany przy- kład jako: $result = unlink( functions.txt ) or die( Operacja zakończyła się niepowodzeniem! ); Funkcja unlink() w przeciwieństwie do dwóch pierwszych przykładów ma wpływ nie tylko na przekazywane jej parametry. W tym przypadku kasuje ona plik z systemu plików. Wszystkie tego rodzaju efekty uboczne funkcji powinny być starannie dokumentowane. PHP ma obszerną listę funkcji, które są już zdefiniowane i gotowe do wykorzystania w pisanych przez nas programach. W licznych rozszerzeniach PHP można znaleźć dosłownie wszystko, od obsługi bazy danych po tworzenie grafiki, odczytywanie i zapisywanie plików XML czy po- bieranie plików z systemów zdalnych. Dodawanie nowych rozszerzeń do PHP zostało opisane w rozdziale 14., wbudowane funkcje są szczegółowo omówione w dodatku A, a przegląd roz- szerzeń PHP znajduje się w dodatku B. Definiowanie funkcji Aby zdefiniować funkcję używa się poniższej składni: function [ ] nazwa_funkcji ( [ parametr [, ... ] ] ) { lista instrukcji } Lista instrukcji może zawierać kod HTML. Można zadeklarować funkcję PHP, która nie zawiera kodu PHP. Na przykład funkcja column() po prostu nadaje krótką nazwę fragmentowi kodu HTML, którego będziemy potrzebować kilkakrotnie na jednej stronie: ? function column() { ? /td td ? } ? Nazwą funkcji może być dowolny łańcuch zaczynający się literą lub podkreśleniem, po których występuje zero lub inne litery, podkreślenia albo cyfry. W nazwach funkcji nie rozróżnia się małych i dużych liter, tzn. można wywołać funkcję sin() jako sin(1), SIN(1), SiN(1) itd., ponieważ wszystkie te nazwy dotyczą tej samej funkcji. Funkcje zwracają zazwyczaj jakąś wartość. Aby funkcja zwróciła wartość, należy użyć instrukcji return, tzn. umieścić wewnątrz funkcji return wyrażenie. Gdy podczas wykonywania pro- gramu napotkana zostanie instrukcja return, kontrola zostanie oddana instrukcji wywołującej, 72 | Rozdział 3. Funkcje a rezultaty uzyskane dla wyrażenie zostaną zwrócone jako wartość funkcji. Mimo że taki kod może wydawać nam się chaotyczny, w uzasadnionych wypadkach można zamieścić wewnątrz funkcji wiele instrukcji return (na przykład, jeżeli mamy instrukcję switch, w celu określenia, która z kilku wartości ma zostać zwrócona). Jeżeli funkcja zostanie zdefiniowana przy użyciu opcjonalnego znaku , zwróci ona raczej wskaź- nik do wyniku funkcji niż kopię danych. Przyjrzyjmy się prostej funkcji. Na listingu 3.1 mamy do czynienia z dwoma łańcuchami, które są łączone, a następnie zwracane jako wynik (w tym przypadku utworzyliśmy odrobinę wol- niejszy równoważnik operatora łączenia łańcuchów, ale dla dobra przykładu prosimy o chwilę cierpliwości). Listing 3.1. Łączenie łańcuchów function strcat($left, $right) { $combined_string = $left . $right; return $combined_string; } Funkcja przyjmuje dwa argumenty, $left i $right. Korzystając z operatora łączenia, funkcja tworzy połączony łańcuch wewnątrz zmiennej $combined_string. Na końcu zwracana jest war- tość zmiennej $combined_string, aby funkcja posiadała wartość w sytuacji, gdy będzie wyliczana z użyciem podanych argumentów. Z uwagi na to, że instrukcja return przyjmuje dowolne wyrażenie, nawet złożone, można upro- ścić program, tak jak widać na listingu 3.2. Listing 3.2. Łączenie łańcuchów bis function strcat($left, $right) { return $left . $right; } Jeżeli umieścimy tę funkcję w dokumencie PHP, możemy wywołać ją z dowolnego miejsca tej strony. Spójrzmy na listing 3.3. Listing 3.3. Używanie funkcji łączenia ?php function strcat($left, $right) { return $left . $right; } $first = To jest ; $second = pełne zdanie! ; echo strcat($first, $second); ? Gdy ta strona jest wyświetlana, pokazywane jest pełne zdanie. W poniższym przykładzie funkcja pobiera liczbę całkowitą, podwaja ją i zwraca wynik: function doubler($value) { return $value 1; } Po zdefiniowaniu funkcji można użyć jej w dowolnym miejscu na stronie. Na przykład: ?= Dwa razy 13 wynosi . doubler(13); ? Definiowanie funkcji | 73 Można zagnieżdżać deklaracje funkcji, ale ma to ograniczone efekty. Zagnieżdżone deklaracje nie ograniczają widoczności funkcji zdefiniowanej wewnątrz. Może ona zostać wywołana z każ- dego miejsca w programie. Funkcja wewnętrzna nie uzyskuje dostępu do argumentów funkcji zewnętrznej automatycznie. Poza tym funkcja wewnętrzna nie może zostać wywołana, dopóki nie zostanie wywołana funkcja zewnętrzna. function outer ($a) { function inner ($b) { echo cię $b ; } echo $a, witamy ; } outer( hej ); inner( Czytelniku ); W wyniku działania powyższego kodu otrzymamy: hej, witamy cię Czytelniku Zasięg zmiennych Jeżeli funkcje nie są wykorzystywane, każda utworzona przez nas zmienna może zostać użyta w dowolnym miejscu na stronie. W przypadku funkcji nie zawsze tak jednak jest. Funkcje mają swój własny zestaw zmiennych, które różnią się od tych na stronie i od tych występujących w in- nych funkcjach. Zmienne zdefiniowane w funkcji, łącznie ze swoimi parametrami, nie są dostępne poza funkcją, a zmienne zdefiniowane poza funkcją nie są dostępne wewnątrz funkcji. Jest to ustawienie do- myślne. Zostało to pokazane w poniższym przykładzie: $a = 3; function foo() { $a += 2; } foo(); echo $a; Zmienna $a umieszczona wewnątrz funkcji foo() to zupełnie inna zmienna niż zmienna $a poza tą funkcją. Mimo że foo() korzysta z operatora „dodaj i przypisz”, wartość zewnętrznej zmien- nej $a będzie wynosić 3 przez cały czas życia strony. Wewnątrz funkcji $a ma wartość 2. Jak to zostało omówione w rozdziale 2., zakres, w jakim zmienna może być widoczna w pro- gramie, nazywany jest zasięgiem zmiennej. Zmienne utworzone wewnątrz funkcji znajdują się w jej zasięgu (np. mają zasięg na poziomie funkcji). Zmienne utworzone poza funkcjami i obiek- tami mają zasięg globalny i istnieją gdziekolwiek poza tymi funkcjami i obiektami. Kilka zmien- nych dostarczonych przez PHP ma zarówno zasięg na poziomie funkcji, jak i zasięg globalny. Na pierwszy rzut oka nawet doświadczonemu programiście może wydawać się, że w cyto- wanym przed chwilą przykładzie zmienna $a będzie miała wartość 5, zanim osiągnięta zo- stanie instrukcja echo. Należy o tym pamiętać przy wybieraniu nazw dla tworzonych przez nas zmiennych. 74 | Rozdział 3. Funkcje Zmienne globalne Jeżeli chcemy, aby zmienna o zasięgu globalnym była dostępna wewnątrz funkcji, należy użyć słowa kluczowego global. Jego składnia wygląda następująco: global zmienna1, zmienna2, ... Gdy zmienimy poprzednio cytowany przykład tak, aby włączyć słowo kluczowe global, otrzymamy: $a = 3; function foo() { global $a; $a += 2; } foo(); echo $a; Zamiast utworzyć nową zmienną o nazwie $a o zasięgu na poziomie funkcji, PHP korzysta ze zmiennej globalnej global $a wewnątrz funkcji. Tym razem wyświetlona wartość $a będzie wynosić 5. Aby uzyskać możliwość korzystania z wybranej przez nas zmiennej lub zmiennych globalnych, należy najpierw umieścić słowo kluczowe global wewnątrz funkcji. Z uwagi na to, że para- metry funkcji są definiowane wcześniej niż treść funkcji, nie mogą one być nigdy zmiennymi globalnymi. Użycie global jest równoważne z utworzeniem referencji do zmiennej w tablicy $GLOBALS. Ozna- cza to, że obie poniższe deklaracje: global $var; $var = $GLOBALS[ var ]; tworzą zmienną na poziomie danej funkcji, która jest referencją do tej samej wartości co zmienna $var w zasięgu globalnym. Zmienne statyczne Podobnie jak C, PHP obsługuje deklarowanie zmiennych statycznych. Zmienna statyczna jest przechowywana pomiędzy wszystkimi kolejnymi wywołaniami danej funkcji, a inicjowana jest podczas wykonywania skryptu tylko przy pierwszym wywołaniu funkcji. Aby zadeklarować zmienną statyczną funkcji, należy przy pierwszym użyciu danej zmiennej użyć słowa kluczo- wego static. Zazwyczaj pierwsze użycie zmiennej statystycznej ma na celu przypisanie war- tości początkowej: static zmienna [= wartość][,... ]; Na listingu 3.4 zmienna $count jest zwiększana o jeden przy każdym kolejnym wywołaniu funkcji. Listing 3.4. Licznik zmiennej statycznej function counter() { static $count = 0; return $count++; } Zasięg zmiennych | 75 for ($i = 1; $i = 5; $i++) { print counter(); } Zmiennej statycznej $count przy pierwszym wywołaniu funkcji przypisywana jest wartość 0. Gdy wartość zostaje zwrócona, następuje inkrementacja zmiennej $count. Kiedy funkcja się koń- czy, $count nie zostaje wymazana, jak się to dzieje w przypadku zmiennych niestatycznych. Jej wartość pozostaje niezmieniona aż do kolejnego wywołania funkcji counter(). Pętla for wy- świetla cyfry od 0 do 4. Parametry funkcji Funkcje mogą mieć dowolną liczbę argumentów, które deklaruje się w definicji funkcji. Istnieją dwa sposoby na przekazywanie parametrów do funkcji. Pierwszym sposobem, dużo bardziej popularnym, jest przekazywanie parametrów przez wartość. Drugim — przekazywanie para- metrów przez referencję. Przekazywanie parametrów przez wartość W większości przypadków parametry przekazuje się przez wartość. Argument to dowolne po- prawne wyrażenie. Wyrażenie to jest obliczane, a wyliczona wartość jest przypisywana odpo- wiedniej zmiennej w funkcji. We wszystkich dotąd cytowanych przykładach argumenty były przekazywane przez wartość. Przekazywanie parametrów przez referencję Przekazywanie przez referencję pozwala na zignorowanie normalnych reguł zakresu i danie funkcji bezpośredniego dostępu do zmiennej. Aby argument mógł zostać przekazany przez refe- rencję, musi być zmienną. Wskazany przez nas argument funkcji zostanie przekazany przez refe- rencję, jeżeli przed nazwą zmiennej na liście parametrów wstawimy znak . Na listingu 3.5 widzimy funkcję doubler() z kilkoma drobnymi zmianami: Listing 3.5. Funkcja doubler po raz drugi function doubler( $value) { $value = $value 1; } $a = 3; doubler($a); echo($a); Z uwagi na to, że parametr funkcji $value jest przekazywany przez referencję, zmodyfikowana przez funkcję zostanie właściwa wartość zmiennej $a, a nie kopia tej wartości. Wcześniej podwo- jona wartość musiała być zwrócona, natomiast teraz przekazywana w wywołaniu zmienna modyfikowana jest tak, by mieć podwojoną wartość. W tym momencie pojawiają się efekty uboczne: ponieważ zmienna $a została przekazana do funkcji doubler() przez referencję, wartość $a jest zależna od tej funkcji. W tym przypadku funkcja doubler() przypisuje jej nową wartość. 76 | Rozdział 3. Funkcje Parametr, który zostanie zadeklarowany jako przekazywany przez referencję, musi być zmienną. Z tego względu, gdybyśmy w powyższym przykładzie użyli instrukcji ?= doubler(7); ? , wystąpiłby błąd. Parametrom przekazywanym przez referencję można jednak przypisać do- myślną wartość (w ten sam sposób jak w przypadku nadawania domyślnej wartości parame- trom przekazywanym przez wartość). Nawet w przypadkach, w których nasza funkcja nie ma wpływu na daną wartość, możemy chcieć, aby parametr był przekazany przez referencję. Gdy przekazywany jest przez wartość, PHP musi skopiować tę wartość. Szczególnie w przypadku łańcuchów i obiektów taka operacja może być bardzo kosztowna. Przekazywanie przez referencję pozwala na uniknięcie koniecz- ności kopiowania wartości. Parametry domyślne Czasami funkcja może potrzebować z góry określonego parametru. Na przykład gdy wywołu- jemy funkcję, aby przejść do ustawień strony, funkcja może przyjąć parametr o nazwie ustawie- nia do wyszukania. Zamiast stosowania jakiegoś słowa kluczowego do oznaczenia, że chcemy uzyskać wszystkie ustawienia, można po prostu nie podawać żadnego argumentu. Takie zacho- wanie jest możliwe dzięki użyciu argumentów domyślnych. Aby określić parametr domyślny, należy przypisać wartość do parametru przy deklarowaniu funkcji. Wartość przypisana do parametru jako domyślna nie może być wyrażeniem złożonym. Może być jedynie wartością stałą. function get_preferences($which_preference = all ) { // jeżeli $which_preference równa się all , zwraca wszystkie ustawienia; // w przeciwnym wypadku, podaje żądane ustawienie... } Kiedy wywołujemy funkcję get_preferences(), możemy zdecydować, czy chcemy podać jakiś argument, czy nie. Jeżeli argument zostanie podany, zwrócone zostanie ustawienie odpowia- dające podanemu łańcuchowi. Jeżeli nie, zwrócone zostaną wszystkie ustawienia. Funkcja może mieć dowolną liczbę parametrów o domyślnych wartościach. Jednak muszą być one umieszczone na liście po wszystkich parametrach, które nie mają domyślnych wartości. Zmienna liczba parametrów Funkcja może wymagać zmiennej liczby argumentów. Na przykład opisywana w poprzednim punkcie funkcja get_preferences() może zwrócić ustawienia dla dowolnej liczby nazw, a nie tylko dla jednej. Aby zadeklarować funkcję ze zmienną liczbą argumentów, należy całkowicie pominąć blok parametrów. function get_preferences() { // jakiś kod } W PHP istnieją trzy funkcje, których można użyć w funkcji, aby pobrać przekazane jej parame- try. Funkcja func_get_args() zwraca tablicę wszystkich parametrów przekazanych danej funk- cji, func_num_args() zwraca liczbę parametrów przekazanych funkcji, a func_get_arg() zwraca określony argument spośród parametrów. $array = func_get_args(); $count = func_num_args(); $value = func_get_arg(numer_argumentu); Parametry funkcji | 77 Na listingu 3.6 funkcja count_list() przyjmuje dowolną liczbę argumentów. Przechodzi ona po wszystkich argumentach i zwraca sumę wszystkich wartości. Jeżeli nie zostały podane żadne parametry, zwraca false. Listing 3.6. Licznik argumentów function count_list() { if(func_num_args() == 0) { return false; } else { for($i = 0; $i func_num_args(); $i++) { $count += func_get_arg($i); } return $count; } } echo count_list(1, 5, 9); Wynik każdej z tych funkcji nie może zostać użyty bezpośrednio jako parametr innej funkcji. Aby można było użyć wyniku jednej z tych funkcji jako parametru, trzeba najpierw przypisać zmiennej wynik funkcji, a następnie użyć tej zmiennej w wywołaniu funkcji. Poniższe wyraże- nie nie zadziała: foo(func_num_args()); Zamiast niego należy użyć, co następuje: $count = func_num_args(); foo($count); Brakujące parametry PHP pozwala na bycie leniwym — przy wywoływaniu funkcji można przekazać do niej dowolną liczbę argumentów. Parametry, których funkcja oczekuje, a które nie zostaną jej przekazane, pozostają nieustawione, a dla każdego z nich zostanie wyświetlone ostrzeżenie: function takes_two( $a, $b ) { if (isset($a)) { echo a jest ustawione ; } if (isset($b)) { echo b jest ustawione ; } } echo Przy dwóch argumentach: ; takes_two(1, 2); echo Przy jednym argumencie: ; takes_two(1); W wyniku działania powyższego kodu otrzymamy: Przy dwóch argumentach: a jest ustawione b jest ustawione Przy jednym argumencie: Warning: Missing argument 2 for takes_two() in /path/to/script.php on line 6 a jest ustawione 78 | Rozdział 3. Funkcje Wartości zwracane Przy użyciu słowa kluczowego return funkcje PHP mogą zwracać tylko jedną wartość: function return_one() { return 42; } Aby zwrócić kilka wartości, należy skorzystać z tablicy: function return_two() { return array( Fred , 35); } Domyślnie wartości są kopiowane z funkcji. Funkcja zdeklarowana przy użyciu znaku przed jej nazwą zwraca referencję (alias) do wartości zwracanej: $names = array( Fred , Barney , Wilma , Betty ); function find_one($n) { global $names; return $names[$n]; } $person = find_one(1); // Barney $person = Barnetta ; // zmienia $names[1] W tym kodzie funkcja find_one() zwraca alias do zmiennej $names[1] zamiast kopii jej warto- ści. Ponieważ przypisana została referencja, $person to alias do $names[1], a drugie przypisa- nie zmienia wartość w $names[1]. Technika ta jest czasem wykorzystywana do zwracania dużych łańcuchów lub tablic z funkcji. Jednak istniejący mechanizm PHP kopiowania podczas zmiany lub inaczej „płytkiego kopio- wania” oznacza zazwyczaj, że nie ma potrzeby zwracania referencji z funkcji. Zwracanie refe- rencji do większych ilości danych nie ma sensu, z wyjątkiem sytuacji, gdy wiemy, że będziemy zmieniać dane, do których odwołamy się przez referencję. Zwracanie referencji jest wolniejsze w porównaniu do zwracania wartości i polega na mechanizmie „płytkiego kopiowania”, który upewnia się, iż kopia tych danych nie została utworzona, jeśli nie zostały one zmienione. Zmienne funkcje Podobnie jak zmienne zmiennych, można wywołać funkcję w oparciu o wartość zmiennej. Dla przykładu przyjrzyjmy się sytuacji, w której zmienna jest wykorzystywana do określenia, którą z trzech funkcji wywołać: switch($which) { case first : first(); break; case second : second(); break; case third : third(); break; } Zmienne funkcje | 79 W tym przypadku moglibyśmy użyć wywoływania funkcji zmiennej do wywołania odpowied- niej funkcji. Aby wywołać funkcję zmienną, należy umieścić w nawiasach za zmienną parame- try dla tej funkcji. Poprzedni przykład należałoby przepisać następująco: $which(); // jeżeli $which ma wartość first , wywoływana jest funkcja first() itd ... Jeżeli nie istnieje funkcja dla danej zmiennej, w momencie wykonywania kodu pojawi się błąd wykonania. Aby temu zapobiec, można użyć wbudowanej funkcji function_exists(), która przed próbą wywołania funkcji zmienną pozwoli na sprawdzenie, czy ona istnieje: $yes_or_no = function_exists(nazwa_funkcji); Na przykład: if(function_exists($which)) { $which(); // jeżeli $which ma wartość first , wywoływana jest funkcja first() itd ... } Konstrukcji języka takich jak echo() czy isset() nie da się wywołać przez funkcje wywoły- wane zmienną: $f = echo ; $f( Witaj świecie! ); // nie działa Funkcje anonimowe Niektóre funkcje PHP wykorzystują dostarczane im przez nas funkcje do wykonywania części swej pracy. Na przykład funkcja usort() korzysta z utworzonej przez nas i przekazanej do niej funkcji, aby określić kolejność sortowania elementów w tablicy. Mimo że można do takich celów zdefiniować funkcję, tak jak to zostało wcześniej pokazane, funkcje te są zazwyczaj lokalne i tymczasowe. Aby odzwierciedlić przejściową naturę funkcji zwrotnych, tworzone są i wykorzystywane funkcje anonimowe (lub funkcje lambda). Funkcję anonimową można utworzyć, korzystając z create_function(). Funkcja ta przyjmuje dwa argumenty — pierwszy opisuje parametry przyjmowane przez funkcję anonimową, a drugi to właściwy kod. Zwracana jest losowo wygenerowana nazwa funkcji: $func_name = create_function(łańcuch_argumentów, łańcuch_kodu); Na listingu 3.7 znajduje się przykładowe użycie usort(). Listing 3.7. Funkcje anonimowe $lambda = create_function( $a,$b , return(strlen($a) - strlen($b)); ); $array = array( tutaj naprawdę długi łańcuch , ten , średnia długość , większy ); usort($array, $lambda); print_r($array); Tablica jest sortowana przez funkcję usort() z użyciem funkcji anonimowej, według długości łańcucha. 80 | Rozdział 3. Funkcje
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

PHP5. Programowanie
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ą: