Wygląd skryptu PHP
Dokumenty, które zawierają skrypty PHP składają się zazwyczaj z kodu HTML z wplecionym tekstem programu. Oznacza to, że tekst skryptu PHP umieszczamy bezpośrednio w kodzie HTML oddzielając go specjalnymi znacznikami. Początek i koniec skryptu mogą tu być oznaczone na różne sposoby:
<? ?>
<?php ?>
<SCRIPT LANGUAGE="php"> </SCRIPT>
lub <% %> (Od wersji 3.0.4) |
Wybór, którego ze znaczników będziesz używać jest dowolny. Warto jednak stosować konsekwentnie raz wybrany.
Najprostszy skrypt będzie wyglądał w ten sposób:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" Content="tekst/html"; charset=iso-8859-2">
<TITLE>Mój pierwszy skrypt PHP</TITLE>
</HEAD>
<BODY>
<?
// Skrypt ten wypisze tekst, używając funkcji "print"
print("Ale fajny ten skrypt");
?>
</BODY>
</HTML> |
Zauważ, że za instrukcją print("Ale fajny skrypt"); znajduje się średnik ";". Jest to niezmiernie ważna rzecz - Po każdej instrukcji wymagany jest średnik, w przeciwnym razie na ekranie zamiast oczekiwanych rezultatów wystąpi błąd, a ty będziesz zachodził w głowę gdzie popełniłeś błąd.
Komentarze
Zauważ, że w tym prostym skrypcie użyłem komentarza (za znacznikiem "//"). Gorąco namawiam Cię, abyś komentował swoje skrypty, nawet wówczas gdy wydaje Ci się to w momencie pisania skryptu niepotrzebne. Lecz wierz mi, że może Ci to zaoszczędzić w przyszłości wiele cennego czasu ( i nerwów!).
Komentarze możemy zawrzeć wewnątrz znaczników:
/* */ Komentarz zawarty pomiędzy tymi znacznikami może zajmować dowolną ilość wierszy
// Komentarz za tym znacznikiem może być zawarty tylko do końca danego wiersza
# Jak wyżej. Wszystko do końca wiersza jest komentarzem
Oczywiście komentarz nie jest widoczny na stronie WWW i nie ma wpływu na wykonywanie programu. Interpreter PHP podczas wykonywania skryptu ignoruje wszystko co zostało objęte znacznikami komentarza.
Rozszerzenie pliku
Napisałeś swój pierwszy skrypt, który wyświetlił za pomocą wbudowanej funkcji "print" dowolny tekst, opatrzyłeś go komentarzem (bo im skorupka za młodu.....), nie zapomniałeś również o średniku. Warto teraz zapisać nasz dokument. Aby Twój skrypt został wykonany, serwer WWW musi stwierdzić, że jest to właśnie skrypt PHP. W tym celu nasz plik musimy zapisać z odpowiednim rozszerzeniem. Do wyboru mamy ( w zależności od konfiguracji serwera):
.php
.php3
.php4
.phtml
Zmienne
Jak w każdym języku programowania niezmiernie istotnym pojęciem jest pojęcie zmiennej. Czym jest zmienna? Zmienna przechowuje dane w trakcie wykonywania skryptu. Każda zmienna posiada swoją nazwę i wartość np.:
$imie="Krzysztof";
$liczba1=30;
$liczba2=30.1; |
Nazwy zmiennych
Zmienne jak już wspomniałem posiadają swoje nazwy, dzięki którym możemy się odwoływać do wartości danej zmiennej. Nazwy zmiennych mogą się składać z liter, cyfr i znaków podkreślenia. Nie mogą jednak rozpoczynać się od cyfry. Każdą nazwę zmiennej poprzedza się znakiem dolara "$". Oto prawidłowe nazwy zmiennych:
$imie;
$Imie;
$MojeImie;
$imie4;
$moje_imie; |
Należy pamiętać, że w nazwach zmiennych jest uwzględniana wielkość liter. Oznacza to, że zmienne $imie i $IMIE to dwie różne zmienne i odwołując się do nich w programie należy zwrócić na to uwagę.
Typy zmiennych
Zmienne w PHP dzielą się na typy, np.: łańcuchy znakowe (string), liczby całkowite (integer), liczby zmiennoprzecinkowe (double).
W PHP nie jest wymagane wcześniejsze deklarowanie zmiennej, tj. wcześniejsze określanie typu zmiennej. Typ zmiennej jest automatycznie określany na podstawie wartości do niej przypisanej.
$imie="Krzysztof" - zmienna typu string
$liczba1=30 - zmienna typu integer
$liczba2=30.4 -zmienna typu double |
Stwórzmy teraz prosty skrypt wykorzystujący zmienne
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" Content="tekst/html"; charset=iso-8859-2">
<TITLE>Nazywam się...</TITLE>
</HEAD>
<BODY>
<?
// Imię i nazwisko zostało zapamiętane w zmiennych,
// a następnie wyświetlone za pomocą funkcji "print"
$imie="Krzysztof";
$nazwisko="Nowak";
print("Nazywam się ".$imię." ".$nazwisko);
?>
</BODY>
</HTML> |
Po wykonaniu skryptu i przesłaniu go do przeglądarki na ekranie pojawi się tekst:
Nazywam się Krzysztof Nowak |
Oczywiście ten sam efekt otrzymalibyśmy bez użycia zmiennych wystarczyłoby tylko zapisać print("Nazywam się Krzysztof Nowak"); .Jednak z użycia zmiennych płyną inne korzyści. Możemy zmienić ich wartość (chociaż nie przewiduję byś często zmieniał swoje imię) i wyświetlony tekst wyglądałby inaczej.
Przypisywanie wartości do zmiennych
Aby określić wartość danej zmiennej używamy znaku równości - to tzw. operator przypisania.
Typ zmiennej, jak już wspomniałem, zostanie zmieniony tak, by odpowiadał typowi danych zapisanych w tej zmiennej.
Wartość zmiennej typu string, czyli dowolny ciąg znaków, zapisujemy zawsze w cudzysłowach.
$zmienna="To jest zmienna typu string"; |
Możemy również zapisać tę samą wartość w cudzysłowach pojedynczych:
$zmienna='To jest zmienna typu string'; |
Jednak istnieje pewna różnica w stosowaniu obydwu cudzysłowów. W łańcuchach w podwójnych cudzysłowach następuje tak zwana interpolacja zmiennych. Oznacza to, że nazwy zmiennych zawartych w takich łańcuchach są zastępowane przez ich wartości.
$imie="Krzysztof";
$nazwisko="Nowak";
$tekst="Nazywam się $imie $nazwisko"; |
Zmienna $tekst przyjmuje teraz wartość: Nazywam się Krzysztof Nowak
W przypadku użycia pojedynczych cudzysłowów:
$tekst='Nazywam się $imie $nazwisko'; |
Zmienna $tekst przyjmie wartość: Nazywam się $imie $nazwisko.
Przyjrzyj się jeszcze naszemu skryptowi z wykorzystaniem funkcji "print":
$imie="Krzysztof";
$nazwisko="Nowak";
print("Nazywam się ".$imię." ".$nazwisko); |
W celu połączenia ze sobą łańcuchów został tu użyty znak kropki. Inaczej operator połączenia łańcuchów.
poprawnie |
niepoprawnie |
$tekst=$imie.$nazwisko |
$tekst=$imie $nazwisko (błąd parsacji) |
$tekst="$imie $nazwisko" |
$tekst="$imie.$nazwisko" (kropka w tym przypadku jest znakiem, a nie operatorem połączenia.) |
|
$tekst='$imie $nazwisko' (zmienna $tekst ma wartość: $imie $nazwisko) |
Wartości zmiennych typu integer (liczba całkowita) oraz double (liczba zmiennoprzecinkowa) zapisujemy bez cudzysłowów:
$liczba=21;
$inna_liczba=356;
$kolejna_liczba=35.46; |
Na zmiennych obu tych typów można przeprowadzić działania matematyczne za pomocą operatorów np.: "+" "-" "*" "/"
Napiszmy prosty skrypt obliczający pole prostokąta.
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" Content="tekst/html"; charset=iso-8859-2">
<TITLE>Pole prostokąta<TITLE>
</HEAD>
<BODY>
<?
//W zmiennych zapisujemy boki prostokata nastepnie za pomocą operatora "*" obliczamy jego pole
$bokA=10;
$bokB=7;
print("Pole prostokąta o bokach $bokA i $bokB wynosi: ".$bokA*$bokB);
?>
</BODY>
</HTML> |
Pobierz przykład:
zmienne.zip>
Operatory
Operator informuje PHP, że ma wykonać jakieś matematyczne lub logiczne działanie np.: dodawanie, odejmowanie, mnożenie etc. Większość operatorów w PHP jest całkowicie intuicyjna.
operatory matematyczne
operator |
przeprowadzana operacja |
+ |
dodawanie $a=$b+3; |
- |
odejmowanie $a=$b-3; |
* |
mnożenie $a=$b*3; |
/ |
dzielenie $a=$b/3; |
% |
dzielenie modulo (zwraca liczbę całkowitą stanowiącą resztę z dzielenia) |
++ |
inkrementacja $a++ ( dodaje do zmiennej wartość 1) |
-- |
dekrementacja $a-(odejmuje od zmiennej wartość 1) |
Operatory można stosować zarówno do liczb całkowitych jak i zmiennoprzecinkowych. Zastosowanie łańcucha znaków wraz z operatorem arytmetycznym spowoduje w pierwszej kolejności przekształcenie łańcucha na liczbę.
Operatory logiczne oraz operatory porównania
Operatory porównania jak sama nazwa wskazuje porównują wartości (np. zmiennych) i zwracają wartość TRUE (prawda) lub FALSE (fałsz).
operator |
przeprowadzana operacja |
< |
mniejsze $a<$b (zwraca wartość true gdy $a jest mniejsze od $b) |
> |
większe $a>$b (zwraca wartość true gdy $a jest większe od $b) |
<= |
mniejsze lub równe $a<=$b (zwraca wartość true gdy $a jest mniejsze lub równe $b) |
>= |
większe lub równe $a<=$b (zwraca wartość true gdy $a jest większe lub równe $b) |
== |
równe $a==$b (zwraca wartość true gdy $a jest równe $b) |
!= |
różne $a!=$b (zwraca wartość true gdy $a jest różne od $b) |
&& (AND) |
koniunkcja (logiczne i) $a==1 && $b==2 (zwraca wartość true jeśli jest spełniony warunek dla $a i $b) |
|| (OR) |
alternatywa (logiczne lub) $a==2 || $b==1 (zwraca wartość true jeśli jest spełniony warunek dla $a lub $b) |
! (NOT) |
negacja !$a==1 (negacja powoduje zmianę prawda na fałsz) |
Należy zwrócić tu uwagę na operator przypisania (=) oraz operator równości (==). Pierwszy z nich sprawia, że obie strony działania są sobie równe np.: $a=45 (W tym wypadku zmiennej $a została przypisana wartość 45). Operator równości pyta zaś, czy obie strony działania są sobie równe (jeśli tak, to zwraca wartość true, jeśli nie, to zwraca wartość false).
Operatory przypisania
Wszystkie operatory przypisania zapisują wartość w zmiennej.
Operatory utworzone przez połączenie operatora przypisania z innym operatorem, dokonują obliczeń na podstawie wartości umieszczonej z jego prawej strony jak i wartości zmiennej zapisanej z lewej strony operatora. Wynik zaś zapisywany jest w zmiennej, umieszczonej z lewej strony operatora np.:
$a=10; //zmiennej $a została przypisana wartość z prawej strony czyli 10
$a+=5; //do zmiennej $a=10 dodano 5, czyli zmienna $a=15. Ten zapis jest tym samym co: $a=$a+5; |
operator |
przeprowadzana operacja |
= |
przypisuje zmiennej zapisanej z lewej strony operatora wartość wyrażenia umieszczonego z jego prawej strony. |
+= |
dodaje wartość podaną z prawej strony operatora do wartości zmiennej zapisanej z jego lewej strony i zapisuje ją w tej zmiennej. |
-= |
odejmuje wartość podaną z prawej strony operatora od wartości zmiennej zapisanej z jego lewej strony i zapisuje ją w tej zmiennej. |
*= |
mnoży wartość podaną z prawej strony operatora przez wartość zmiennej zapisanej z jego lewej strony i zapisuje ją w tej zmiennej. |
/= |
dzieli wartość podaną z prawej strony operatora przez wartość zmiennej zapisanej z jego lewej strony i zapisuje ją w tej zmiennej. |
%= |
przypisuje zmiennej zapisanej z lewej strony operatora jej wartość podzieloną modulo przez wartość podaną z prawej strony operatora. |
.= |
przypisuje zmiennej zapisanej z lewej strony operatora łańcuch znaków będący połączeniem łańcucha zapisanego w zmiennej z łańcuchem podanym z prawej strony operatora. |
Napiszmy skrypt, który wypisze pewne dane, używając operatora .=
<?
$tekst="To";
$tekst.=" jest";
$tekst.=" jakiś";
$tekst.=" tam";
$tekst.=" tekścik.";
print($tekst);
?> |
W rezultacie wykonania tego skryptu w oknie przeglądarki ukaże nam się tekst: To jest jakiś tam tekścik. W każdej instrukcji są jest dopisywana na końcu zmiennej $tekst kolejna wartość.
Inne operatory
operator |
przeprowadzana operacja |
. |
konkatenacja (łączenie łańcuchów znaków) |
$ |
odwołanie do zmiennej |
& |
odwołanie do pamięci zajmowanej przez zmienną |
-> |
odwołanie do metody lub właściwości klasy |
=> |
określa domyślną wartość argumentu lub indeks tablicy |
@ |
powstrzymuje wyświetlanie błędów funkcji |
? |
trójargumentowy operator warunkowy |
Operatory: $ oraz . już poznałeś. Inne zostaną omówione w dalszych częściach kursu.
Pobierz przykład:
operatory.zip>
Stałe
Zmienne jak już wiemy mogą zmieniać swoją wartość w czasie wykonywania skryptu. Często chcielibyśmy jednak, aby pewne obiekty miały niezmienną, z góry określoną wartość. Takie obiekty nazywamy stałymi. Możemy być pewni, że ich wartość nie ulegnie zmianie podczas wykonywania programu.
Stałe definiujemy za pomocą funkcji define (definiowanie wartości stałej) np.:
define ("JAKAŚ_STAŁA", 247.6) |
Funkcja ta posiada dwa argumenty: nazwa stałej ("JAKAŚ_STAŁA") oraz jej wartość (w naszym przykładzie wynosi ona 247.6). Zwróć uwagę na zapis nazwy. Została ona zapisana wielkimi literami. Nie jest to konieczne, ale dla odróżnienia od zmiennych powszechnie przyjęte.
Stałe warto wykorzystać zwłaszcza wtedy, gdy tworzymy program, który kilkakrotnie wykorzystuje pewna stałą wartość. Zamiast wypisywać ją wielokrotnie możemy utworzyć stałą i tylko się do niej odwoływać w programie. Jest to niezmiernie istotne wówczas, gdy wartość stałej musimy zmienić. Wystarczy to zrobić raz, a odniesie to skutek wszędzie tam, gdzie odwołamy się do stałej poprzez jej nazwę.
Wyobraźmy sobie sytuację, gdzie musimy obliczyć np.: kwotę podatku od naszych dochodów. Jak wiadomo stawka podatkowa wynosi 19%. Niech będzie to wobec tego nasza stała.
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" Content="tekst/html"; charset=iso-8859-2">
<TITLE>PodatekTITLE>
</HEAD>
<BODY>
<?
// definiujemy stałą - STAWKA_PODATKOWA o wartości 0.19 (19%)
define ("STAWKA_PODATKOWA", 0.19);
print("Podatek od kwoty: 3000 PLN wynosi: ". (STAWKA_PODATKOWA*3000)." PLN");
?>
</BODY>
</HTML> |
Oczywiście większy sens definiowania stałej istnieje wówczas gdy kilkakrotnie wykorzystujemy wartość stałej. Gdy zmieni się stawka podatkowa my będziemy musieli uczynić to tylko raz (w miejscu definiowania stałej), a nie w każdym miejscu wywołania zmiennej.
Wartością stałej może być nie tylko liczba, ale również tekst. Należy go wówczas ująć w cudzysłów np.:
define ("MOJA_STAŁA", "PHP jest OK.!") |
Niektóre stałe są tworzone automatycznie przez PHP. W momencie uruchamiania PHP tworzy kilka stałych. Jedną z nich jest PHP_VERSION, która zawiera numer wersji PHP wykonującej skrypt. Stała TRUE przypisana jest wartość 1, zaś stałej FALSE wartość 0. Stała PHP_OS opisuje system operacyjny.
Pobierz przykład:
stale.zip
Zmienne środowiskowe
PHP udostępnia także zmienne środowiskowe. Są to zmienne tworzone podczas uruchamiania nowego procesora poleceń systemu operacyjnego. Zmienne te zawierają specjalne informacje dotyczące konfiguracji serwera WWW czy konfiguracji PHP. Wykorzystując je możemy się dowiedzieć czegoś więcej na temat osób odwiedzających nasze strony, czy tez na temat samego serwera. Poniżej znajdują się zmienne, które mogą okazać się bardzo przydatne. Listę zmiennych środowiskowych możemy uzyskać wywołując funkcję phpinfo(). Znajduje się ona w sekcji Environment.
$SERVER_SOFTWARE - zawiera nazwę i wersję serwera WWW. Apache/1.3.12 (Win32)
$SERVER_NAME - zawiera nazwę serwera. localhost
$SERVER_PROTOCOL - zawiera nazwę protokołu serwera HTTP/1.1
$SERVER_PORT - zawiera numer portu serwera. 80
$PATH_INFO - zawiera ścieżkę oraz nazwę uruchomionego skryptu. /~moje_projekty/skrypty/fajny_skrypt.php
$PATH_TRANSLATED - zawiera bezwzględną ścieżkę do uruchomionego skryptu. c:apacheusersmoje_projektyskryptyfajny_skrypt.php
$SCRIPT_NAME - zawiera nazwę skryptu. /php3/php.exe
$REMOTE_ADDR - zawiera IP osoby odwiedzającej stronę. 127.0.0.1
$REMOTE_HOST - zawiera nazwę hosta osoby odwiedzającej stronę. localhost
$HTTP_REFERER - zawiera URL poprzedniej odwiedzonej strony. http://localhost/~cwphp4/podstawy/
$HTTP_USER_AGENT - zawiera nazwę przeglądarki oraz systemu operacyjnego, z którego korzysta osoba oglądająca stronę. Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)
$HTTP_HOST - zawiera nazwę serwera. localhost
$REQUEST_URI - zawiera nazwe skryptu /~moje_projekty/skrypty/fajny_skrypt.php
$SERVER_ADMIN - zawiera adres e-mail administratora serwera
Zmienne te możemy wykorzystać np. w celu uzyskania pewnych informacji o odwiedzających naszą stronę. Stwórzmy np. skrypt wyświetlający nazwę przeglądarki, systemu operacyjnego oraz adresu IP osoby odwiedzającej nasza stronę.
<?
//wykorzystujemy zmienne środowiskowe $HTTP_USER_AGENT w celu uzyskania nazwy przeglądarki oraz systemu. Za pomocą zmiennej $REMOTE_ADDR uzyskujemy adres IP, zaś zmiennej $HTTP_REFERER adres poprzednio odwiedzonej strony.
print("Używasz przeglądarki: ". $HTTP_USER_AGENT. "<BR>");
print("Twój adres IP to: ".$REMOTE_ADDR."<BR>");
print("Przybyłeś ze strony: ".$HTTP_REFERER);
?> |
W wyniku tego skryptu w oknie przeglądarki wyświetli się np.:
Używasz przeglądarki: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90)
Twój adres IP to: 127.0.0.1
Przybyłeś ze strony: http://localhost/fajny_sktypt.php |
Oczywiście nie ma najmniejszej potrzeby przypominać naszym gościom z jakiej przeglądarki korzystają, czy też na jakim systemie pracują. Chyba, że koniecznie chcesz im zaimponować Twoim niesłychanym geniuszem i znawstwem PHP. Zmienne środowiskowe okażą się nieocenione przy konstruowaniu statystyk strony dostarczających nam niezbędnych informacji o odwiedzających naszą witrynę gościach.
Pobierz przykład: zmienne_srodowiskowe.zip
|
instrukacja warunkowa if
Często będziemy chcieli wykonać jakieś działanie, ale tylko wtedy, gdy zostanie spełniony pewien warunek. W tym celu posłużymy się instrukcją if. Ma ona następującą postać:
if (warunek_1) {
blok instrukcji 1
} elseif (warunek_2) {
blok instrukcji 2
} elseif (warunek_3) {
blok instrukcji 3
........
} else {
blok instrukcji n
}
lub forma uproszczona:
if (warunek) {
blok instrukcji
} |
Działanie tej instrukcji nie zbyt skomplikowane. Najpierw jest sprawdzana wartość warunku_1. Jeżeli jest on prawdziwy (czyli ma wartość TRUE) wykonywany jest blok instrukcji 1. Jeśli tak nie jest (czyli warunek_1 ma wartość FALSE) cały ten blok jest pomijany i sprawdzane są kolejne warunki i jeśli jeden z nich jest spełniony to wykonywany jest odpowiedni blok instrukcji. Gdy zostanie odnaleziona instrukcja, której warunek będzie posiadał wartość TRUE, to pozostałe instrukcje zostaną pominięte. Jeżeli żaden z warunków nie jest spełniony to wykonywany jest blok instrukcji w warunku else ( o ile ten istnieje).
Jeżeli zdecydujemy się na formę uproszczoną to zostanie sprawdzony warunek. Jeśli jest spełniony (wartość TRUE) to zostanie wykonany blok instrukcji. W przeciwnym razie (warunek posiada wartość FALSE) program przechodzi do kolejnych instrukcji.
Spójrzmy jak to działa w praktyce:
if ($i>0) {
print (" $i jest większa od 0");
}
elseif ($i<0) {
print ("$i jest większa od 0");
}
else {
print ("$i jest równe 0");
} |
W powyższym przykładzie mamy pewna zmienną $i. Najpierw program sprawdza pierwszy warunek, w naszym przypadku, czy $i jest większa od 0. Jeśli tak, to za pomocą funkcji print zostanie wyświetlony napis informujący nas o tym fakcie. Jeśli warunek $i>0 przyjmie wartość FALSE, czyli $i nie jest większy od 0, to program przejdzie do wykonywania kolejnych instrukcji elseif. W naszym przykładzie sprawdzi, czy zmienna $i jest mniejsza od 0. Gdy będzie to prawdą zostanie wyświetlony odpowiedni napis (patrz funkcja print). Gdyby się okazało, że warunek i tym razem nie został spełniony, to pozostała już tylko jedna możliwość (zmienna $i jest równa 0). Aby w tym wypadku wyświetlić odpowiedni komunikat użyliśmy klauzuli else. W ten sposób mamy pewność, że przynajmniej jeden warunek będzie spełniony.
klauzula elseif oraz else
Klauzuli elseif oraz else stosujemy w celu sprawdzenia wszystkich możliwych sytuacji. Zaczynamy od zapisania pierwszego warunku w instrukcji if, następnie sprawdzamy wszystkie pozostałe warunki umieszczając każdy z nich w klauzuli elseif. Na końcu umieszczamy klauzulę else i w ten sposób jesteśmy przygotowani na wszystkie możliwe sytuacje.
Sprawdźmy jak to działa w skrypcie, który będzie wyświetlał nazwę dnia tygodnia w języku polskim. Posłużymy się tu oprócz instrukcji if funkcją date( ). W naszym przypadku funkcja ta będzie zwracała bieżący dzień tygodnia (w języku angielskim).
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" Content="tekst/html"; charset=iso-8859-2">
<TITLE>Dzień tygodnia<TITLE>
</HEAD>
<BODY>
<?
$dzien=date("l"); //Zmiennej $dzien przypisaliśmy za pomocą funkcji date aktualny dzień tygodnia
if ($dzien=="Monday") {
print ("Dzisiaj jest poniedziałek");
} elseif ($dzien=="Tuesday") {
print ("Dzisiaj jest wtorek");
} elseif ($dzien=="Wednesday") {
print ("Dzisiaj jest środa");
} elseif ($dzien=="Thursday") {
print ("Dzisiaj jest czwartek");
} elseif ($dzien=="Friday") {
print ("Dzisiaj jest piątek");
} elseif ($dzien=="Saturday") {
print ("Dzisiaj jest sobota");
} else {
print ("Dzisiaj jest niedziela");
}
?>
</BODY>
</HTML> |
W naszym skrypcie zmienna $dzien przechowuje nazwę aktualnego dnia tygodnia (która przypisaliśmy za pomocą funkcji date("l") ). Instrukcja if sprawdza po kolei wszystkie możliwe warunki. Jeśli, któryś z nich będzie miał wartość TRUE, za pomocą funkcji print wyświetli się odpowiedni komunikat "Dzisiaj jest .....".
Warto w tym miejscu jeszcze raz zwrócić uwagę na operator == i jego różnicę pomiędzy operatorem przypisania =. Gdybysly zastosowali operator przypisania = , czyli np.: $dzien="Saturday" oznaczałoby to, że zmiennej $dzien przypisujemy wartość "Saturday", a nie sprawdzamy tylko czy ta zmienna taką wartość posiada. Operator równości == sprawdza czy zmienna $dzien posiada daną wartość ( tu "Saturday"). Jeśli tak, to warunek zwraca wartość TRUE, jeśli nie to FALSE. O róznicy pomiędzy tymi dwoma operatorami wspominałem w rozdziale Operatory.
Operator trójargumentowy
PHP udostępnia także skróconą formę instrukcji if. Wykorzystuje ona znak ? - tzw. operator trójargumentowy. Ma ona postać:
warunek ? instrukcja_true : instrukcja_false |
Na początku sprawdzany jest oczywiście warunek. Jeśli osiaga on wartośc TRUE, to zostanie spełniona instrukcja_true. W przeciwnym razie, gdy warunek ma wartość FALSE, spełniona zostanie instrukcja_false. Taka postać instrukcji odpowiada dokładnie poniższej:
if (warunek) {
instrukcja_true;
} else {
instrukcja_false;
} |
Przykład działania skróconej formy instrukcji if przedstawiam poniżej.
Skrypt ten sprawdza, czy liczba przechowywana w zmiennej $a jest większa od liczby przechowywanej w zmiennej $b.
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" Content="tekst/html"; charset=iso-8859-2">
<TITLE>Czy większa?<TITLE>
</HEAD>
<BODY>
<?
$a=3;
$b=8;
$a>$b ? print("Liczba $a jest większa od liczby $b") : print("Liczba $a nie jest większa od liczby $b");
?>
</BODY>
</HTML> |
Oczywiście w rezultacie wykonania tego skryptu na ekranie pojawi się napis:
Liczba 3 nie jest większa od liczby 8 |
Ten sam rezultat moglibyśmy otrzymać tworząc skrypt:
<?
$a=3;
$b=8;
if ($a>$b) {
print("Liczba $a jest większa od liczby $b");
} else {
print("Liczba $a nie jest większa od liczby $b");
}
?> |
Jednak używając operatora trójargumentowego możliwy (i poprawny) jest zapis:
<?
$a=3;
$b=8;
print($a>$b ? "Liczba $a jest większa od liczby $b" : "Liczba $a nie jest większa od liczby $b");
?> |
Wynik będzie identyczny. Czegoś takiego nie da się zrobić przy wykorzystaniu instrukcji if.
Operator ? jest operatorem, a nie instrukcją. Co oznacza, że wyrażenie zostanie przetworzone jako całość. Jeśli instrukcja_true będzie miała być wykonana i jeśli instrukcją tą będzie funkcja, to zostanie ona wywołana. Jeśli instrukcją tą będzie jedynie literał, to zastąpi on wyrażenie ? Ze względu na fakt, że wyrażenie warunkowe daje w naszym przypadku wartość FALSE, to cała linia kodu zostanie zamieniona do następującej postaci:
print ("Liczba $a nie jest większa od liczby $b"); |
Pobierz przykład:
if.zip
Instrukcja switch
Przypomnijmy sobie instrukcję if. Wykorzystywaliśmy ją aby wykonać określone działanie gdy spełniony jest pewien warunek. Instrukcję tę mogliśmy wykorzystać również aby sprawdzić wartość zmiennej i w zależności od wyniku wykonać różne działanie. Przypomnijmy tutaj stworzony przez nas skrypt, przekształcający nazwy dni tygodnia na nazwy polskie:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" Content="tekst/html"; charset=iso-8859-2">
<TITLE>Dzień tygodnia<TITLE>
</HEAD>
<BODY>
<?
$dzien=date("l"); //Zmiennej $dzien przypisaliśmy za pomocą funkcji date aktualny dzień tygodnia
if ($dzien=="Monday") {
print ("Dzisiaj jest poniedziałek");
} elseif ($dzien=="Tuesday") {
print ("Dzisiaj jest wtorek");
} elseif ($dzien=="Wednesday") {
print ("Dzisiaj jest środa");
} elseif ($dzien=="Thursday") {
print ("Dzisiaj jest czwartek");
} elseif ($dzien=="Friday") {
print ("Dzisiaj jest piątek");
} elseif ($dzien=="Saturday") {
print ("Dzisiaj jest sobota");
} else {
print ("Dzisiaj jest niedziela");
}
?>
</BODY>
</HTML> |
Zamiast instrukcji if można tu wykorzystać instrukcję wyboru (instrukcja switch), która pozwala w sposób bardziej czytelny zaprogramować te działanie. Oto postać instrukcji switch:
switch (wyrażenie) {
case wartosc1:
dzialanie1;
break;
case wartosc2:
dzialanie2;
break;
….
default: dzialanie;
} |
wartosc1, wartosc2 ... nazywamy wyrażeniami wyboru. Służą one do określenia, które działanie ma zostać podjęte - to, dla którego warunek posiada wartość TRUE. W przypadku, gdy żaden z warunków nie będzie posiadał wartości TRUE, wykonywane są instrukcje z bloku default. Break oznacza koniec wykonywania porównań. Nasz przykład można wobec tego zapisać:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" Content="tekst/html"; charset=iso-8859-2">
<TITLE>Dzień tygodnia<TITLE>
</HEAD>
<BODY>
<?
$dzien=date("l"); //Zmiennej $dzien przypisaliśmy za pomocą funkcji date aktualny dzień tygodnia
switch ($dzien) {
case "Monday":
print ("Dzisiaj jest poniedziałek");
break;
case "Tuesday" :
print ("Dzisiaj jest wtorek");
break;
case "Wednesday" :
print ("Dzisiaj jest środa");
break;
case "Thursday" :
print ("Dzisiaj jest czwartek");
break;
case "Friday" :
print ("Dzisiaj jest piątek");
break;
case "Saturday" :
print ("Dzisiaj jest sobota");
break;
default: print ("Dzisiaj jest niedziela");
}
?>
</BODY>
</HTML> |
Pobierz przykład:
switch.zip>
Pętla for
Często będziemy stawać przed zadaniem, aby jakąś czynność powtórzyć wiele razy. Wyobraźmy sobie na przykład, że chcemy wypisać liczby w kolejności od 1 do 50. Oczywiście można by to uczynić wykorzystując np. funkcje print. Można to jednak uczynić o wiele prościej i krócej wykorzystując tzw. pętlę. Pętla polega na wielokrotnym wykonywaniu bloku instrukcji. W PHP mamy kilka pętli. Najprostszą z nich jest pętla for. Oto jej postać:
for (inicjalizacja; warunek_pętli; zwiększanie_licznika) {
blok instrukcji
} |
inicjalizacja - tu nadajemy zmiennej sterującej w pętli wartość początkową.
warunek_petli - jest to wyrażenie określające warunek, czyli pod jakim warunkiem petla ma być wykonywana
zwiększanie_licznika - tu określamy sposób zwiększania zmiennej sterującej przy każdym przebiegu pętli
Bogatsi o tą wiedzę wróćmy do naszego zadania, czyli wypisania kolejnych liczb od 1 do 50.
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" Content="tekst/html"; charset=iso-8859-2">
<TITLE>Odlicznie do 50<TITLE>
</HEAD>
<BODY>
<?
for($i=1; $i<=50; $i++) { print("$i ");
}
?>
</BODY>
</HTML> |
Po wykonaniu tego skryptu, oczom naszym ukaże się cos takiego:
1 2 3 4 5 6 7 ............. 48 49 50 |
Najpierw ustaliliśmy wartość początkową tzw. zmiennej sterującej, czyli $i=1. Nadaliśmy jej wartość 1, ponieważ taka właśnie ma być pierwsza liczba. W kolejnej sekcji ustaliliśmy warunek wykonania pętli. Chcemy, aby ostatnia liczbą była liczba nie większa niż 50. Zapisaliśmy to w ten sposób: $i<=50. Następnie musimy za każdym razem wykonywania pętli zwiększyć wartość zmiennej $i o 1. W tym celu posługujemy się operatorem inkrementacji, czyli ++. Dzięki temu w każdym przebiegu pętli zmienna $i zwiększa swoją wartość właśnie o 1. Ostatnim naszym zabiegiem było ustalenie bloku instrukcji. Nam chodziło o wyświetlenie kolejnych liczb (czyli każdorazowe wyświetlenie zmiennej $i). Posłużyliśmy się tu znaną nam już funkcją print.
Jeśli chodzi o pętlę for to jej wykonywanie przebiega następująco. Najpierw wykonywana jest instrukcja inicjalizująca, następnie sprawdzany jest warunek pętli i jeśli da on wartość true, to wykonywany jest blok instrukcji umieszczony wewnątrz pętli. Zanim ponownie zostanie obliczona wartość warunku kontynuacji, wykonana jest instrukcja inkrementacji, czyli zwiększania wartości zmiennej sterującej.
W miejscu instrukcji inicjalizującej możesz podać listę przypisań oddzielonych od siebie przecinkami. Można skorzystać z tej możliwości, aby określić wartości kilku zmiennych.
Wykorzystajmy pętlę for do utworzenia tabliczki mnożenia. Zastanów się przy okazji ile czasu i energii pochłonęłoby Ci utworzenie takiej tabliczki w tradycyjny sposób, za pomocą wyłącznie znaczników HTML.
Cały skrypt w PHP przedstawia się następująco:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" Content="tekst/html"; charset=iso-8859-2">
<TITLE>Tabliczka mnożenia<TITLE>
</HEAD>
<BODY>
<?
print("<TABLE BORDER=1>");
for($i=1; $i<=10; $i++) {
print("<TR>");
for($a=1;$a<=10;$a++){print("<TD>".$i*$a."</TD>");}
print("</TR>");
}
print("</TABLE>");
?>
</BODY>
</HTML> |
Po wykonaniu powyższego skryptu w oknie przeglądarki powinno ukazać się:
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
2 |
4 |
6 |
8 |
10 |
12 |
14 |
16 |
18 |
20 |
3 |
6 |
9 |
12 |
15 |
18 |
21 |
24 |
27 |
30 |
4 |
8 |
12 |
16 |
20 |
24 |
28 |
32 |
36 |
40 |
5 |
10 |
15 |
20 |
25 |
30 |
35 |
40 |
45 |
50 |
6 |
12 |
18 |
24 |
30 |
36 |
42 |
48 |
54 |
60 |
7 |
14 |
21 |
28 |
35 |
42 |
49 |
56 |
63 |
70 |
8 |
16 |
24 |
32 |
40 |
48 |
56 |
64 |
72 |
80 |
9 |
18 |
27 |
36 |
45 |
54 |
63 |
72 |
81 |
90 |
10 |
20 |
30 |
40 |
50 |
60 |
70 |
80 |
90 |
100 |
Zwróć uwagę, że w powyższym skrypcie jedna zostały wykorzystane dwie pętle for. Jedna do stworzenia poszczególnych wierszy tabeli, druga do utworzenia poszczególnych komórek w danym wierszu, przy czym drugą z nich umieściliśmy wewnątrz bloku instrukcji pierwszej.
Pobierz przykład:
for.zip
Pętle while i do...while
pętla while
Wspomniałem już, że PHP oferuje kilka możliwości zapętlania, czyli powtarzania pewnych czynności. Poznałeś już pętlę for. Niestety jej wadą jest fakt, że musieliśmy okreśłić skończoną liczbę jej powtórzeń. A co w wypadku, gdy nie wiemy ile razy należy powtórzyć jakąś czynność, gdy należy wykonać pętlę, aż do skutku? Tu przychodzi z pomocą pętla while. Oto jej postać:
while (warunek) {
blok instrukcji
} |
Oznacza to dosłownie: Dopóki jest spełniony warunek, wykonuj instrukcje. Czyli pętla sprawdza, czy jest spełniony warunek, jeśli tak (warunek posiada wartość TRUE), to wykonuje podany blok instrukcji, aż do momentu gdy warunek będzie posiadał wartość FALSE - czyli nie będzie spełniony.
Wróćmy do naszego przykładu z wyświetleniem kolejnych liczb od 1 do 50. Poprzednio użyliśmy w tym celu pętli for, to samo możemy uzyskać za pomocą pętli while:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" Content="tekst/html"; charset=iso-8859-2">
<TITLE>Odlicznie do 50<TITLE>
</HEAD>
<BODY>
<?
$i=1;
while ($i<=50) {
print("$i ");
$i++;
}
?>
</BODY>
</HTML> |
Rezultat wykonania tego skryptu będzie identyczny, jak w przypadku pętli for.
Wykorzystajmy teraz pętlę while do sytuacji, gdzie nie wiemy dokładnie ile razy pętla zostanie wykonana. Stwórzmy skrypt, który będzie wyświetlał kolejne dni tygodnia, począwszy od dnia dzisiejszego, aż do najbliższej soboty. Zanim jednak to nastąpi musimy poznać bliżej dwie funkcje PHP: date( ) oraz time( )
funkcja time ( ) zwraca w formie liczby integer aktualny znacznik czasu. Znacznik czasu określa ilość sekund jakie upłynęły od początku epoki - czyli od 1 stycznia 1970.
funkcja date (format, znacznik_czasu ) zwraca łańcuch znaków opisujący datę. Funkcja date posiada dwa argumenty: format - informuje funkcję date o postaci, w jakiej ma być wyświetlona data. Format "l" oznacza dzień tygodnia. Co oznacza znacznik czasu już wiesz. Jeśli znacznik czasu nie zostanie podany, to funkcja date użyje aktualnej daty.
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" Content="tekst/html"; charset=iso-8859-2">
<TITLE>Kiedy sobota?<TITLE>
</HEAD>
<BODY>
<?
$data_dzisiaj=time( );
print ("Do soboty pozostają jeszcze: <OL>");
while (date ("l", $data_dzisiaj) !="Saturday") {
print ("<LI>". date ("l", $data_dzisiaj));
$data_dzisiaj += (60*60*24);
}
print ("</OL>");
?>
</BODY>
</HTML> |
W zmiennej $data_dzisiaj przechowujemy aktualną datę za pomocą ilości sekund, które upłynęły od 1 stycznia 1970 (wykorzystujemy tu funkcję time ( )). Następnie za pomocą funkcji print wyświetlamy tekst, który opisze nam uzyskane wyniki. Pętla while sprawdza, czy data zapisana w zmiennej $data_dzisiaj to piątek. Jeśli okaże się, że to piątek, to pętla while zostanie zakończona. Jeśli jednak aktualny dzień nie jest piątkiem, to wyświetlony zostanie element listy z dniem tygodnia, a do wartości zapisanej w zmiennej $data_dzisiaj dodawane są 24 godziny (60*60*24).
pętla do ... while
Pętla do... while ma postać:
do{
blok instrukcji
}
while (warunek) |
Inaczej oznacza to: wykonuj instrukcje dopóki jest spełniony warunek. Różnica pomiędzy pętlą wile a pętlą do... while tkwi w miejscu sprawdzania warunku. Pętla while sprawdza warunek przed wejściem, czyli zanim zostanie wykonany blok instrukcji. Zauważ, że blok instrukcji wcale nie musi być wykonany ( jeśli warunek posiada wartość FALSE). Pętla do.. while sprawdza warunek po pierwszym wykonaniu bloku instrukcji w pętli. Wynika z tego, że blok instrukcji w pętli do.. while musi być wykonany przynajmniej raz, bez względu na warunek.
Wróćmy do programu, który wyświetlał nam dni pozostałe do soboty. Zauważ, że jeśli aktualnym dniem będzie sobota, to pętla nie zostanie w ogóle wykonana a w oknie przeglądarki nie pojawi się żaden dzień. Jeżeli chcesz, aby został wyświetlony napis "Saturday" (jeśli bieżącym dniem będzie sobota) użyj pętli do ... while. Stanie się tak dlatego, ponieważ kod pętli zostanie wykonany nim będzie sprawdzona data zapisana w zmiennej $data_dzisiaj. Zmieniając typ pętli na do.. while, wyświetli ona wszystkie dni, aż do następnej soboty.
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" Content="tekst/html"; charset=iso-8859-2">
<TITLE>Kiedy sobota?<TITLE>
</HEAD>
<BODY>
<?
$data_dzisiaj=time( );
print ("Do następnej soboty pozostają jeszcze: <OL>");
do {
print ("<LI>". date ("l", $data_dzisiaj));
$data_dzisiaj += (60*60*24);
}
while (date ("l", $data_dzisiaj) !="Saturday");
print ("</OL>");
?>
</BODY>
</HTML> |
Pobierz przykład:
do_while.zip