APLIKACJE INTERNETOWE 5 PHP W P R O W A D Z E N I E D O P R O G R A M O W A N I A
PLAN PREZENTACJI Absolutne podstawy PHP w HTML-u Pierwszy skrypt Błędy Kończenie instrukcji Komentarze Zmienne Podstawy Działania na zmiennych Typy zmiennych Zmienne predefiniowane przez serwer Stałe Operatory Operatory arytmetyczne Przypisanie Operatory porównania Kontrola błędów Operatory logiczne Operatory łańcuchowe (stringów) Struktury kontrolne Instrukcje warunkowe Pętle Switch Przerwania wykonania pętli Dwie alternatywy
ABSOLUTNE PODSTAWY Użycie PHP: wstawienie kodu bezpośrednio do pliku ze stroną WWW, wstawienie pliki zawierające skrypty PHP powinny mieć najczęściej rozszerzenie PHP Skrypty można wstawiać na cztery sposoby: <? echo "Skrypt PHP, najprostszy sposób ; echo "Prawie to samo, ale częściej stosowane ; <script type="text/php >echo "Metoda dla tych, co lubią dużo pisać </script> <% echo "Metoda znana z ASP, nie każdy serwer ją obsługuje ; %>
ABSOLUTNE PODSTAWY Kolejne kroki tworzenia prostego skryptu w PHP: Tworzymy plik index.php Wpisujemy do stworzonego pliku kod: echo "Mój pierwszy skrypt w języku PHP"; umieszczamy na naszym koncie WWW - koniecznie z obsługą PHP (C:\temp), otwieramy stworzony plik w przeglądarce (http://localhost/php/index.php), w wyniku działania skryptu otrzymamy tylko tekst Mój pierwszy skrypt w języku PHP
ABSOLUTNE PODSTAWY Procedura echo Procedurę tą można użyć na dwa sposoby różniące się tylko sposobem wyświetlania tekstu pochodzących z wielu źródeł echo ("tekst ); treści można tu wstawić oddzielając je przecinkiem: echo ( tekst1, tekst2, tekst3 ); echo "tekst ; treści można tu wstawić łącząc je kropkami: echo tekst1. tekst2. tekst3 ; Oba te sposoby dają taki sam wynik: tekst1tekst2tekst3. Jeżeli chcemy oddzielić teksty spacjami, należy je dodać do funkcji echo: echo "tekst1 "."tekst2 "."tekst3";
ABSOLUTNE PODSTAWY Błędy W przypadku literówki lub poważniejszego błędu składniowego, parser poinformuje nas o tym następującym komunikatem: parse error: parse error, unexpected T_ECHO, expecting ',' or ';' in /var/www/kurs_php/kurs.php on line 3. W informacji tej zawierają się informacje o: rodzaju błędu, analizowanym pliku, linii kodu, w którym się on znalazł. Prostą i skuteczną metodą debugowania jest wstawianie w kluczowych miejscach skryptu procedury echo wyświetlającej wartości ważnych zmiennych.
ABSOLUTNE PODSTAWY Kończenie instrukcji Każdą instrukcję w PHP (tak jak w wielu innych językach) należy zakończyć znakiem ; (średnik). Każde zakończenie instrukcji bez średnika spowoduje, że skrypt nie będzie interpretowany przez parser. Od tej reguły jest tylko jeden wyjątek średnikiem nie trzeba kończyć ostatniej instrukcji w bloku kodu PHP: echo "Tekst pierwszy"; echo "tekst drugi"; echo "tekst trzeci i ostatni"
ABSOLUTNE PODSTAWY Komentarze to specjalnie oznaczone fragmenty kodu, które są omijane przez parser. Służą do różnych celów - można w nich umieszczać np.: uwagi do danego fragmentu skryptu, znaki copyright, uwagi do innych członków grupy roboczej. Istnieją trzy sposoby oznaczania komentarzy: // # - komentarz jednoliniowy, tylko do końca linii, - komentarz jednoliniowy, sposób znany z shella, /* */ - komentarz wieloliniowy - można oznaczyć nim np. całe fragmenty kodu, aby tymczasowo wyłączyć je z wykonywania.
ZMIENNE Porcje danych są przechowywane w zmiennych - są to lokowane na czas wykonywania skryptu fragmenty pamięci, w których można przechowywać dowolne dane. Zmienną w PHP oznaczamy znakiem $ (dolar). Rozróżniana jest wielkość znaków, a więc $zmienna, $ZmIeNNa i $ZMIENNA nie przechowują tych samych danych. Zasady nazywania zmiennych: musi się zaczynać od litery (wielkiej lub małej) znaku _ (podkreślenie), nie można używać spacji. Dalej mogą wystąpić także cyfry. Przykłady nazw zmiennych: $liczba_wpisow, $_czy_prawda, $czyprawda, $numer.
ZMIENNE Zgodnie z przyjętą konwencją, jeśli w nazwie zmiennej ma wystąpić kilka wyrazów, nie powinno się ich oddzielać znakiem podkreślenia ('_'), ale napisać każdy z nich (oprócz pierwszego) wielką literą (np. $liczbawszystkichwpisów). W PHP nie musimy się martwić strukturami używanymi w innych językach programowania, takimi jak np.: deklarowanie nazwy czy typu zmiennej. Wystarczy napisać po prostu: $text = "Ala ma kota, kot ma Alę"; $cyferka = 15; Tak tworzona jest nowa zmienna (o ile taka już nie istnieje) i zapisywana jest jej wartość.
ZMIENNE Działania na zmiennych Zmienna jest strukturą, która (o ile przechowuje liczby) może być traktowana właśnie jak liczba. PHP pozwala na wykonywanie na nich standardowych działań dodawania, odejmowania, mnożenia i dzielenia. Dla przykładu: $a = 15; $b = 5; $c = $a+$b; $d = $a-$b; $e = $a*$b; $f = $a/$b; $g = $a%$b; W tym przykładzie wartość zmiennej $c wyniesie 20 (suma), $d = 10 (różnica), $e = 75 (mnożenie) i $f = 3 (dzielenie). Wytłumaczenia wymaga znak '%' (modulo) jest to operator reszty z dzielenia. W tym wypadku $g wyniesie 0, bo reszta z dzielenia 15 przez 3 wynosi właśnie zero.
ZMIENNE Typy zmiennych W PHP istnieje pięć podstawowych typów zmiennych: liczby całkowite (integer), liczby rzeczywiste (double), ciągi (string), tablice (array), obiekty (object). PHP, kiedy zachodzi taka potrzeba, automatycznie zamienia rodzaje zmiennych. Zdarza się jednak, że nie jesteśmy zadowoleni z wyniku takiej zamiany. Pozostaje wtedy jedno wyjście - rzutowanie. W PHP mamy do czynienia z dwoma typami tej procedury: cast oraz settype().
ZMIENNE Pierwszy (cast)służy do jednorazowej zamiany typu zmiennej. Wystarczy dopisać przed nazwą zmiennej typ w nawiasie, aby uzyskać pożądany wynik. $liczbarzeczywista = (real) $liczbacalkowita; W tym wypadku dozwolone typy rzutowań to: (int), (integer) (real), (double), (float) (string) (array) (object) rzutuj do typu całkowitego, rzutuj do typu rzeczywistego, rzutuj do ciągu, rzutuj do tablicy, rzutuj do obiektu. Rzutowanie cast stosuje się także w zabezpieczaniu skryptu przed możliwymi atakami.
ZMIENNE Druga możliwość to użycie funkcji settype(), która pobiera dwa argumenty. Pierwszy to nazwa zmiennej, której typ chcemy ustalić, a drugi to docelowy typ zmiennej. (dozwolone to integer, double, string, array i object ). $liczba = 10.3; settype($liczba, "integer"); echo $liczba; Po wykonaniu tego przykładu pokaże się liczba 10, ponieważ liczba 10,3 została zamieniona na liczbę całkowitą.
ZMIENNE Zmienne predefiniowane przez serwer W każdym skrypcie możemy użyć kilku zdefiniowanych i gotowych do użycia zmiennych. Ich wartości zależą od ustawień serwera. DOCUMENT_ROOT zwraca katalog główny serwera, gdzie umieszczony jest skrypt, HTTP_HOST zawartość nagłówka Host z aktualnego zapytania, jeśli taki istnieje, REMOTE_ADDR zwraca adres IP użytkownika, który wyświetlił bieżącą stronę, SCRIPT_FILENAME zwraca ścieżkę do wykonywanego skryptu, SCRIPT_NAME zwraca ścieżkę do wykonywanego pliku. Jest to przydatne w wypadku skryptów odwołujących się do samych siebie. echo $_SERVER['nazwa_zmiennej_predefiniowanej'] ;
ZMIENNE Stałe W PHP istnieją też obiekty, które nazywamy stałymi są to rodzaje zmiennych, które przechowują pewne określone dane i nie można zmienić ich wartości w trakcie wykonywania skryptu. W zapisie różnią się one od tradycyjnych zmiennych tym, że nie mają znaku dolara na początku. PHP tworzy automatycznie kilka stałych gotowych do wykorzystania w skryptach: FILE zawiera nazwę pliku, który jest akurat przetwarzany, LINE zawiera numer akurat przetwarzanej linii skryptu, Własne stałe można definiować funkcją define(), która pobiera dwa argumenty nazwę stałej i jej wartość. define(hello, "Witam!") echo HELLO; //Wyświetli: Witam!
OPERATORY Operatory arytmetyczne Operatory to specjalne znaki, pozwalające na wykonywanie operacji na zmiennych. Pomagają one też wyłapywać błędy w kodzie, jak również porównywać zmienne. Operatory arytmetyczne to: +, -, *, / i %, czyli odpowiednio: dodawanie, odejmowanie, mnożenie, dzielenie i dzielenie modulo (zwraca resztę z dzielenia).
OPERATORY Przypisanie Operator przypisania wygląda jak znak 'równa się' (=). Jest to przypisanie wartości wyrażenia z jego prawej strony (wyrażenie, czyli zmienna lub funkcja zwracająca jakąś wartość) do zmiennej z jego lewej strony. $a = 5; //przypisuje liczbę 5 do zmiennej $a
OPERATORY Operatory porównania - służą do porównywania wartości stojących po ich lewej i prawej stronie. Przykład Nazwa Opis $a == $b Równy Zwraca TRUE, jeśli $a jest równe $b. $a === $b Identyczny Zwraca TRUE, jeśli $a jest równe $b i obie zmienne są tego samego typu (tylko w PHP 4). $a!= $b Różny Zwraca TRUE, jeśli $a nie jest równy $b. $a <> $b Różny Zwraca TRUE, jeśli $a nie jest równy $b. $a!== $b Nie identyczny Zwraca TRUE, jeśli $a nie jest równy $b lub nie są tego samego typu (tylko w PHP 4). $a < $b Mniejszy niż Zwraca TRUE, jeśli $a jest mniejszy od $b. $a > $b Większy niż Zwraca TRUE, jeśli $a jest większy od $b. $a <= $b Mniejszy lub równy Zwraca TRUE, jeśli $a jest mniejszy lub równy $b. $a >= $b Większy lub równy Zwraca TRUE, jeśli $a jest większy lub równy $b.
OPERATORY Kontrola błędów W PHP4 istnieje operator wyciszający błędy jest to @ (małpa). Umieszczony przed dowolnym wyrażeniem zapobiega wyświetleniu komunikatu o błędzie. Jeśli jest to błąd typu fatal error, to skrypt zostanie zatrzymany, ale treść błędu i tak nie zostanie wyświetlona. W komercyjnych aplikacjach bardzo często stosuje się operator @, gdyż wręcz niedopuszczalne jest pojawienie się błędu (na przykład typu parse error) w programie.
OPERATORY Inkrementacja i dekrementacja Jeśli zachodzi potrzeba podniesienia lub zmniejszenia wartości danej zmiennej o 1, nie musimy od razu pisać $a=$a+1; etc. Poniższa tabela pokazuje, w jaki sposób wykorzystać do tego celu wbudowane w PHP mechanizmy. Przykład Nazwa Opis ++$a $a++ --$a $a-- Preinkrementacja Postinkrementacja Predekrementacja Postdekrementacja Najpierw zwiększa wartość $a o jeden, a potem zwraca $a. Najpierw zwraca $a, a potem zwiększa $a o jeden. Najpierw zmniejsza wartość $a o jeden, a potem zwraca $a. Najpierw zwraca $a, a potem zmniejsza $a o jeden.
OPERATORY Operatory logiczne Operatory te wykorzystuje się głównie w instrukcjach warunkowych typu if, jeśli umieszczony został więcej niż jeden warunek. Przykład Nazwa Opis $a and $b I Zwraca TRUE, jeśli zarówno $a, jak i $b są TRUE. $a or $b Lub Zwraca TRUE, jeśli $a lub $b są TRUE. $a xor $b Wyłącznie-Lub Zwraca TRUE, jeśli $a lub $b jest TRUE, ale nie jednocześnie.! $a Nie Zwraca TRUE, jeśli $a nie jest TRUE. $a && $b I Zwraca TRUE, jeśli zarówno $a, jak i $b są TRUE. $a $b Lub Zwraca TRUE, jeśli $a lub $b jest TRUE.
OPERATORY Operatory łańcuchowe (stringów) - Istnieją dwa takie operatory. (kropka) oraz.= (kropka+znak =). Pierwszy z nich łączy dwa ciągi z jego lewej i prawej strony, a następnie zapisuje wynik do zmiennej. $ciag1 = "Hello"; $ciag2 = " world"; $razem = $ciag1.$ciag2; // $razem zawiera teraz Hello world Drugi operator łańcuchowy (.=) dopisuje wartość ciągu z jego prawej strony do zmiennej z jego lewej strony. Dla przykładu: $razem = "Hello"; $ciag2 = " world"; $razem.= $ciag2; //$razem teraz również zawiera Hello world
STRUKTURY KONTROLNE Instrukcje warunkowe Instrukcje warunkowe używa się do sprawdzenia tego, czy dany warunek jest prawdziwy, i na podstawie wyniku takiego zapytania wykonywany jest określony fragmentu kodu. if (pierwszy warunek do spełnienia) { // instrukcje do wykonania, gdy pierwszy warunek jest prawdą } else if (drugi warunek do spełnienia) { // instrukcje do wykonania, gdy drugi warunek jest prawdą } else { // instrukcje do wykonania, gdy żaden warunek nie jest prawdą }
STRUKTURY KONTROLNE Instrukcje warunkowe Za warunek można uznać wszystko, co zwraca jakąś wartość, czyli zmienną, instrukcję warunkową lub funkcję. Za prawdę uznawane jest wszystko, co ma wartość różną od 0. if ($a>$b) { echo "a jest większe niż b ; } if ($ble) { echo Zmienna ble =.$ble; }else{ echo Zmienna ble jest pusta ; } if ($row=mysql_fetch_array($res)) { echo "Kolejny rekord bazy danych."; }
STRUKTURY KONTROLNE Instrukcje warunkowe - Instrukcje mogą być też lokowane jedna w drugiej. if ($a>$b) { } if ($a>$c) echo "Zmienna a jest większa od zmienych b i c"; Jednak powyższy przykład można zastąpić innym mniej skomplikowanym łącząc wyrażenia operatorami logicznymi. if ($a>$b && $a>$c) { echo "Zmienna a jest większa od zmienych b i c"; }
STRUKTURY KONTROLNE Instrukcje warunkowe Wyrażenia logiczne da się łączyć w jeszcze bardziej skomplikowane struktury, dodając nawiasy i znak! (wykrzyknik) przed nimi, czyli zaprzeczając wyrażeniu w nawiasie lub pojedynczemu wyrażeniu. if (!($a>$b && $a>$c) && ($d<$e $e<$h)) { echo "Prawda tylko wtedy, gdy $a<$b, $a<$c oraz $d<$e lub $e<$h"; }
STRUKTURY KONTROLNE Pętla for Pętla for jest używana tylko wtedy, gdy zachodzi potrzeba wykonania jakiegoś kodu określoną liczbę razy (założoną z góry przez autora lub pochodzącą ze zmiennej). for (inicjalizacja zmiennych; sprawdzenie warunku; modyfikacja zmiennych) { //instrukcje do wykonania } for($i=10; $i<20 ; $i++){ echo "<span style=\"font-size:".$i."px\"> tekst </span><br />" }
STRUKTURY KONTROLNE Pętla while - w tym wypadku nie jest z góry narzucone to, ile razy dany blok instrukcji zostanie wykonany. Jest on wykonywany, dopóki podany warunek jest prawdziwy. while (warunek) { //instrukcje do wykonania } W ten sposób można zapisać przykład dotyczący pętli FOR: $i=10; while ($i<20){ echo "<span style=\"font-size:".$i."px\"> tekst </span><br />" $i++; }
STRUKTURY KONTROLNE Pętla do..while To specyficzna odmiana pętli WHILE, bo jeśli w WHILE warunek jest na starcie fałszywy, to pętla ani razu nie wykona bloku instrukcji. W wypadku użycia DO WHILE pętla wykona blok instrukcji przynajmniej raz (nawet wtedy, gdy warunek jest od początku fałszywy). do { //instrukcje do wykonania } while (warunek);
STRUKTURY KONTROLNE Pętla foreach Pętla ta jest zaczerpnięta z innego języka programowania Perla. Ułatwia ona obsługę tablic i tablic asocjacyjnych. Poniższy przykład pokazuje, jak łatwo zamienić pętlę FOR na FOREACH w wypadku korzystania z tablic. Blok instrukcji: jest równoważny zapisowi: for($i=0;$i<sizeof($kolory);$i++) { echo "Kolorek: ".$kolory[$i]; } foreach ($kolory as $kolor) { echo "Kolorek: ".$kolor; }
STRUKTURY KONTROLNE Pętla foreach Atuty FOREACH stają się jeszcze bardziej oczywiste w wypadku obsługi tablic asocjacyjnych. Blok instrukcji: while( list($klucz, $wartosc) = each($tabliczka) ) echo "$klucz => $wartosc<br />"; } jest równoważny zapisowi: foreach ($tabliczka as $klucz => $wartosc) { echo "$klucz => $wartosc <br />"; }
STRUKTURY KONTROLNE Switch - jest rodzajem skondensowanej instrukcji warunkowej, którą zazwyczaj zastępujemy rozbudowane i wielokrotne użycia ELSE IF. switch ($miasto) { case 'warszawa': echo "Pochodzisz ze stolicy?"; break; case 'hel': echo "Mieszkasz nad morzem?"; break; case 'sanok': echo "A może w Bieszczadach?"; break; default: echo "Miasto nierozpoznane."; }
STRUKTURY KONTROLNE Przerwania wykonania pętli Może się zdarzyć, że będziemy chcieli przerwać wykonywania pętli. Służą do tego instrukcje BREAK oraz CONTINUE. BREAK - powoduje przerwanie wykonywania pętli, a co za tym idzie dalszej części zawartego w niej kodu. CONTINUE - powoduje natomiast przerwanie aktualnej iteracji (przebiegu) pętli i wykonanie jej od nowa.
STRUKTURY KONTROLNE Dwie alternatywy Istnieją też składnie alternatywne do tych przedstawionych powyżej. Pierwsza z nich to skrócona wersja instrukcji warunkowej IF. Jej schemat jest następujący: ((war)? Instrukcje jeśli war jest prawdziwy : instrukcje w przeciwnym wypadku) W ten sposób możemy np. umieszczać instrukcje warunkowe wewnątrz tekstu wyświetlanego za pomocą funkcji ECHO. echo "Liczba 5 jest ".((5>$a)?"większa" : "mniejsza").' od zmiennej $a';
STRUKTURY KONTROLNE Koleją możliwością jest niewykorzystywanie nawiasów klamrowych w instrukcjach IF, FOR, SWITCH, WHILE oraz FOREACH. Zamiast klamry otwierającej należy umieścić dwukropek, a na końcu słowo ENDIF, ENDSWITCH bądź inny END... odpowiedni do użytej pętli. Taka składnia obejmuje też użycie ELSEIF i ELSE: if ($a<5 && $b<5) : echo "przypadek pierwszy"; elseif ($a<5 && $b>5) : echo "przypadek drugi"; else: echo "ostatnia możliwość"; endif;