1. Wprowadzenie do języka PHP
Transkrypt
1. Wprowadzenie do języka PHP
mgr inż. Grzegorz Kraszewski – TECHNOLOGIE INTERNETOWE 3 – wykład 1: „Wprowadzenie do PHP”. 1. Wprowadzenie do języka PHP Język PHP jest generalnie w swojej składni podobny do języka C, chociaż występuje tu szereg różnic. 1.1. Zmienne W PHP nazwy zmiennych poprzedzamy znakiem dolara ($). Nie ma znaczenia rodzaj zmiennej (tekstowa, liczbowa, tablica itp.). Zmienna nie wymaga deklaracji, przez co nie posiada z góry określonego typu, jak widać w przykładzie: $x = 33; $x = 73.26; $x = 'tekst'; // $x jest liczbą całkowitą // teraz jest liczbą zmiennoprzecinkową // a teraz tekstem Typ zmiennej jest określany na podstawie jej zawartości i kontekstu w jakim została użyta. Niezbędne konwersje są w razie potrzeby wykonywane automatycznie. Do dyspozycji mamy 8 typów zmiennych. Cztery typy proste: ● liczbowy całkowity (integer), ● liczbowy zmiennoprzecinkowy (double), ● logiczny (boolean), ● tekstowy (string). mgr inż. Grzegorz Kraszewski – TECHNOLOGIE INTERNETOWE 3 – wykład 1: „Wprowadzenie do PHP”. Dysponujemy też dwoma typami złożonymi: tablicą (array) i obiektem (object). Tablica w PHP nie jest zwykłą tablicą, ale tablicą asocjacyjną, a więc zestawem par „klucz-wartość”, przy czym klucz wcale nie musi być liczbą, może być tekstem. Możemy na przykład mieć tablicę (niech nosi nazwę $tablica): klucz 'miś' 'pies' 'strażak' 'trener' wartość 'Uszatek', 'Pankracy', 'Sam', 'Leo' i indeksować ją w następujący sposób $x = $tablica['miś']; ($x ma wartość 'Uszatek') można też tradycyjnie $x = $tablica[1]; ($x ma wartość 'Pankracy') mgr inż. Grzegorz Kraszewski – TECHNOLOGIE INTERNETOWE 3 – wykład 1: „Wprowadzenie do PHP”. Oprócz tego mamy dwa specjalne typy zasób (resource) i NULL. Zasób służy do reprezentowania różnego rodzaju (właśnie...) zasobów systemu, np. otwieranych plików. NULL natomiast to po prostu zmienna nie posiadająca żadnej wartości (zauważmy, że 0 czy tekst '' jest wbrew pozorom wartością...). 1.2. Konwersja typów Konwersja między typami jest przeprowadzana automatycznie w razie potrzeby. Oczywiście nie zawsze musi się ona zakończyć sukcesem... Zacznijmy od najbardziej oczywistych konwersji: Na typ logiczny możemy skonwertować w zasadzie wszystko. Fałszem są następujące wartości: ● ● ● ● ● ● liczba stałoprzecinkowa 0, liczba zmiennoprzecinkowa 0.0, pusty łańcuch tekstowy, lub tekst '0'. tablica bez elementów, obiekt bez zmiennych, NULL. Cokolwiek innego jest uważane za prawdę logiczną. mgr inż. Grzegorz Kraszewski – TECHNOLOGIE INTERNETOWE 3 – wykład 1: „Wprowadzenie do PHP”. Na liczbę stałoprzecinkową można skonwertować: ● typ logiczny – prawda to 1, fałsz to 0, ● liczbę zmiennoprzecinkową – zostanie zaokrąglona w kierunku zera (dodatnie w dół, ujemne w górę). Zalecana wyjątkowa ostrożność, liczba większa od maksymalnego zakresu liczb całkowitych da wynik nieokreślony, możemy się także zdziwić, gdy się okaże że (0.1 + 0.7) * 10 to całkowite 7 a nie 8 (!). ● tekst, konwersja kończy się po napotkaniu pierwszego znaku nie będącego cyfrą, zatem spokojnie można skonwertować np. '12 krzeseł stało przy tym stole', wynikiem będzie 12. Jeżeli piewrszym znakiem nie jest cyfra, wynikiem jest 0. Podobnie jest z liczbą zmiennoprzecinkową, różnica polega wyłącznie na rozpoznawaniu zapisu naukowego przy konwersji z tekstu (w postaci np. 1.6e+03, -.7E4, 2.273e-6 i tym podobne). Na tekst możemy skonwertować wszystko, co prawda niektóre konwersje są niezbyt użyteczne. Wartości logiczne są konwertowane na łańcuchy '1' (prawda) i '' (fałsz, łańcuch pusty). Liczby – sprawa jasna jak sądzę (jeżeli chcemy formatować jak w C, trzeba – tak jak w C – użyć funkcji sprintf()). NULL skonwertowany na tekst daje łańcuch pusty. Konwersja tablic, obiektów i zasobów na tekst jest mało interesująca, dostaniemy odpowiednio teksty: 'Array', 'Object' i 'Resource id #x', gdzie x to wewnętrzny numer zasobu. mgr inż. Grzegorz Kraszewski – TECHNOLOGIE INTERNETOWE 3 – wykład 1: „Wprowadzenie do PHP”. Na tablicę zmienić możemy bez problemu typ logiczny, liczbę stało- i zmiennoprzecinkową oraz tekst. Dostaniemy jednoelementową tablicę z elementem o indeksie 0 i zawartością taką samą jak podana zmienna. Podobnie będzie z zasobem. Konwersja obiektu na tablicę zainteresuje nas, gdy zajmiemy się programowaniem obiektowym w PHP. NULL z kolei daje tablicę pustą. Konwertowanie do obiektu jest możliwe, omówimy to później. Konwertowanie do zasobu natomiast możliwe nie jest. Jawna i niejawna konwersja typów W zdecydowanej większości przypadków (o wiele częściej niż w C/C++) konwersja typów zachodzi niejawnie w razie potrzeby. W PHP bardzo rzadko sięgamy po jawną konwersję, czy inaczej rzutowanie typów. Zapisuje się je tak samo jak w C: $x = '3.141592654'; $y = (double)$x; // $x jest tekstem // $y jest typu zmiennoprzecinkowego mgr inż. Grzegorz Kraszewski – TECHNOLOGIE INTERNETOWE 3 – wykład 1: „Wprowadzenie do PHP”. 1.3. Pozyskiwanie informacji o zmiennej Z potrzebą uzyskania informacji o typie i zawartości zmiennej najczęściej spotkamy się przy testowaniu i usuwaniu błędów w skrypcie. Wygodnym narzędziem jest funkcja var_dump(). Oto kilka przykładów: $b = 14; var_dump($b); int(14) $b = 'Ala ma kota, a kot ma pchły'; var_dump($b); string(27) "Ala ma kota, a kot ma pchły" $b['Jan'] = 'Kowalski'; $b['Tomasz'] = 'Kwiatkowski'; var_dump($b); array(2) { ["Jan"]=> string(8) "Kowalski" ["Tomasz"]=> string(11) "Kwiatkowski" } mgr inż. Grzegorz Kraszewski – TECHNOLOGIE INTERNETOWE 3 – wykład 1: „Wprowadzenie do PHP”. Z potrzebą uzyskania informacji o typie zmiennej możemy się też spotkać w czasie wykonania programu, kiedy informacja ta steruje samym programem. Funkcja gettype() zwraca łańcuch tekstowy opisujący typ zmiennej ('boolean', 'integer', 'double', 'string', 'array', 'object', 'resource', względnie 'NULL', czy nawet 'unknown type'). Oprócz tego mamy szerreg wygodnych funkcji zwracających wartość logiczną, a sprawdzających, czy zmienna jest konkretnego typu. Ich nazwy są samotłumaczące się: ● is_int() ● is_float() ● is_string() ● is_boolean() ● is_array() ● is_object() ● is_resource() mgr inż. Grzegorz Kraszewski – TECHNOLOGIE INTERNETOWE 3 – wykład 1: „Wprowadzenie do PHP”. 1.4. Zasięg zmiennych Generalnie w PHP wszystkie zmienne są globalne, a więc są widziane w każdym miejscu skryptu, również jeżeli przedzielony jest fragmentami kodu HTML. Wyjątkiem są zmienne użyte wewnątrz funkcji. Inaczej niż w C, zmienne globalne nie są widziane wewnątrz funkcji zdefiniowanych przez użytkownika! $g = 3; function f() { var_dump($g); } f(); NULL Wbrew oczekiwaniom, odwołanie się do zmiennej $g wewnątrz funkcji nie jest odwołaniem do globalnego $g! PHP stwierdza tu odwołanie się do lokalnego $g, które z globalnym nie ma nic wspólnego. To lokalne $g nie ma nadanej wartości, stąd wynik. Chcąc korzystać z globalnych zmiennych wewnątrz funkcji możemy albo podać je jako parametry funkcji, albo użyć dyrektywy global, przy czym oba sposoby mają różne konsekwencje. mgr inż. Grzegorz Kraszewski – TECHNOLOGIE INTERNETOWE 3 – wykład 1: „Wprowadzenie do PHP”. Przy przekazaniu zmiennej globalnej jako parametru, operujemy na jej kopii, tak jak przy przekazaniu przez wartość w C: $g = 3; function f($parametr) { var_dump($parametr); $parametr = 17; } f($g); var_dump($g); int(3) int(3) mgr inż. Grzegorz Kraszewski – TECHNOLOGIE INTERNETOWE 3 – wykład 1: „Wprowadzenie do PHP”. Przy przekazaniu zmiennej globalnej za pomocą dyrektywy global operujemy na samej zmiennej, troszkę tak jak przy przekazaniu przez referencję w C++: $g = 3; function f() { global $g; var_dump($g); $g = 17; } f($g); var_dump($g); int(3) int(17) mgr inż. Grzegorz Kraszewski – TECHNOLOGIE INTERNETOWE 3 – wykład 1: „Wprowadzenie do PHP”. 1.5. Referencje Oczywiście referencje w PHP też są możliwe i zachowują się bardzo podobnie jak w C++, w poniższym przykładzie $ref jest referencją do $zmienna: $zmienna = 3; $ref = &$zmienna; var_dump($zmienna); var_dump($ref); ?><br><? $ref = 123; var_dump($zmienna); var_dump($ref); int(3) int(3) int(123) int(123) mgr inż. Grzegorz Kraszewski – TECHNOLOGIE INTERNETOWE 3 – wykład 1: „Wprowadzenie do PHP”. 1.6. Zmienna zmienną jest Egzotyczną rzeczą są nazwy zmiennych będące zmiennymi – w PHP można dynamicznie wygenerować nazwę zmiennej. Najlepiej wyjaśni to przykład: $a = 'b'; $b = 426; $c = $$a; var_dump($c); int(426) Łatwo się domyślić jak to działa. Zapis $$a jest interpretowany jako ${$a}, wartością wnętrza nawiasu klamrowego jest rzecz jasna 'b', wyrażenie zostaje więc uproszczone do $b. Znakomity sposób do zaskoczenia czytającego źródła... $a = 'b'; $e = 'd'; $b = 426; $d = 'a'; $c = $$$$e; var_dump($c); Wynik jest oczywiście taki sam jak poprzednio – int(426)...