podstawy php - politechnika opolskaciąg informujący o przeglądarce która została użyta do...
TRANSCRIPT
Podstawy PHP
Wstęp
PHP jest językiem skryptowym służącym do rozszerzania możliwości stron internetowych. Jego składnia jest bardzo podobna do popularnych języków programowania C/C++, lecz jest bardzo uproszczona – programista PHP zazwyczaj nie musi przejmować się poprawnością typów zmiennych, przydzielaniem dla nich pamięci itp. Dodatkowo wbudowana obsługa wielu popularnych baz danych ułatwia twórcy operacje na tych bazach. Dzięki połączeniu z biblioteką GD możliwe jest także dynamiczne tworzenie obrazków GIF (starsze wersje GD) lub PNG (nowsze wersje).
Aby plik był rozpoznany przez serwer WWW jako skrypt PHP musi on mieć odpowiednie rozszerzenie. Rozszerzenia te można zdefiniować w konfiguracji serwera WWW, ale zazwyczaj jest to .php3 (dla PHP w wersji 3), .php lub php4 (dla PHP w wersji 4) i .phtml (dla PHP w wersji starszej niż 3). Po nadaniu plikowi takiego rozszerzenia serwer będzie wiedział, że plik ten nie jest przeznaczony do bezpośredniego wyświetlenia (jak w przypadku plików HTML), ale że najpierw trzeba go przepuścić przez parser PHP.
Jeśli zwykłemu plikowi HTML nadamy rozszerzenie .php, to zostanie on prawidłowo wyświetlony, mimo że nie jest to skrypt PHP. Dzieje się tak dlatego, że parser PHP przetwarzając stronę ma 2 tryby pracy: HTML, gdzie cała treść jest wyświetlana, bez przetwarzania, i PHP, gdzie treść jest traktowana jako skrypt do przetworzenia. Do określenia w pliku co jest kodem HTML a co PHP służą specjalne znaczniki. Początkowo parser jest w trybie HTML. Aby przejść do trybu PHP można użyć jednego z czterech znaczników:
1 <? echo ("to jest najprostsza metoda, podobna do SGML'a"); ?>
2 <?php echo("jeśli serwujesz pliki XML, użyj tej metody"); ?>
3 <script language="php">
echo ("niektóre edytory (np. FrontPage) nie lubią przetwarzania instrukcji");
</script>
4 <% echo ("Możesz też użyć metody podobnej do tej z ASP"); %>
<%= $variable; # To jest skrót dla "<% echo ..." %>
Przykład 1. Wyświetlenie “Hello Word”:
<?php echo 'Hello World!'; ?>
Po wejściu na tę stronę z przeglądarki WWW w okienku powinno być widać tylko napis “Hello World!” (bez cudzysłowów). Jedna uwaga: polecenie echo nie wysyła znaku końca linii, więc jeśli chcesz, aby po ciągu znaków (albo w którymkolwiek miejscu tego ciągu) kończyła się linia, w tym miejscu trzeba wstawić ‘\n’.
Parser PHP podczas wykonywania skryptu sprawdza jego poprawność. Jeśli coś się nie zgadza, zostaniemy o tym poinformowani. Skrypt będzie jednak wykonany do miejsca, w którym pojawił się błąd. Najczęściej są to błędy składniowe – brak średnika na końcu linii, niedomkniętych nawiasach (bardzo częsty błąd przy złożonych instrukcjach warunkowych), cudzysłowach lub nawiasach klamrowych kończących blok danych (przy instrukcjach warunkowych, pętlach). Błędy przy braku zamykających nawiasów klamrowych łatwo można rozpoznać, ponieważ numer linii zawierającej błąd jest o jeden większa od liczby linii w pliku.
Zmienne
W języku PHP zmienne oznacza się za pomocą znaku dolara (‘$’) przed identyfikatorem. Obsługa zmiennych w PHP jest uproszczona do minimum. Zmienna jest inicjalizowana (to znaczy rezerwowany jest dla niej pewien obszar w pamięci) przy pierwszym jej użyciu. Nazwy zmiennych muszą zaczynać się od litery (dużej lub małej) lub “underscore” (dolna kreska – ‘_’) a dalej mogą się składać z dowolnej ilości liter, cyfr i znaków o kodzie ASCII powyżej 127. Przy nazwach zmiennych
respektowana jest wielkość znaków – zmienne $Test i $test to dwie różne zmienne. Oto przykład przypisywania wartości zmiennym i wykorzystanie ich w poleceniu echo. Przykład 2:
<?php
$nazwa = 1; // Zmiennej "nazwa" przypisywana jest wartość liczbowa 1
$druga_nazwa = "Tekst"; /* Zmiennej "druga_nazwa" przypisany jest ciąg znaków
"Tekst" */
$trzecia_nazwa = $nazwa; // Zmiennej "trzecia_nazwa" przypisywana
echo "To jest $druga_nazwa"; // Powinien wyświetlić się napis "To jest Tekst"
echo '$druga_nazwa'; // Powinien wyświetlić się napis "$druga_nazwa"
echo $nazwa; // Powinna wyświetlić się cyfra 1
?>
Parametr dla polecenia echo można podawać zarówno w cudzysłowach jak i apostrofach. Jednak te parametry nie są sobie równoznaczne. W przypadku cudzysłowów zmienne zawarte między nimi są zamieniane na ich wartość, a w przypadku apostrofów zmienna pozostaje swoją nazwą.
Typy zmiennych:
liczby całkowite (integer)
liczby rzeczywiste (double)
ciągi (string)
tablice (array)
obiekty (object)
Dodatkowo PHP potrafi konwertować zmienne całkowite zapisane w różnych formatach liczbowych.
Przykład 3
<?php
$blah = "0"; // $blah jest ciągiem (ASCII 48)
$blah++; // $blah jest ciągiem "1" (ASCII 49)
$blah += 1; // $blah jest teraz wartością całkowitą (2)
$blah = $foo + 1.3; // $blah jest wartością rzeczywistą (1.3)
$blah = 5 + "10 Malutkich Świnek"; // $blah jest wartością całkowitą (15)
$blah = 5 + "10 Małych Świń"; // $blah jest wartością całkowitą (15)
?>
Przykład 4. Rzutowanie typów danych:
<?php
$liczba_calkowita = 10;
$liczba_rzeczywista = (real) $liczba_calkowita;
?>
(int), (integer) – rzutuj do typu całkowitego
(real), (double), (float) – rzutuj do typu rzeczywistego
(string) – rzutuj do ciągu
(array) – rzutuj do tablicy
(object) – rzutuj do obiektu
Drugim sposobem, trwałym, jest użycie funkcji settype. Funkcja ta pobiera 2 argumenty. Pierwszym jest nazwa zmiennej do ustalenia typu, a drugim ciąg określający nowy typ zmiennej.
W każdym skrypcie PHP dostępne jest kilka zmiennych, których wartość jest ustalana na podstawie zmiennych środowiskowych serwera WWW. Dostępne są jak zwykłe zmienne – ze znakiem dolara przed nazwą.
GATEWAY_INTERFACE -Informacja o specyfikacji CGI używanej przez serwer, np. ‘CGI/1.1′.
SERVER_NAME - Nazwa hosta serwera na którym skrypt jest uruchamiany. Jeśli skrypt pracuje na wirtualnym hoście, to zmienna przyjmie jako wartość nazwę wirtualnego hosta.
SERVER_SOFTWARE - Ciąg identyfikujący serwera podawany przy odpowiadaniu na zapytania.
SERVER_PROTOCOL - Nazwa i numer wersji protokołu za pomocą którego wysłano zapytanie o stronę, np. ‘HTTP/1.0′;
REQUEST_METHOD - Metoda zapytania użyta do uzyskania dostępu do strony, np. ‘GET’, ‘HEAD’, ‘POST’, ‘PUT’.
QUERY_STRING - Ciąg zapytania (jeśli takowy istnieje) za pomocą którego połączono się ze stroną.
DOCUMENT_ROOT - Katalog główny drzewa dokumentów spod którego skrypt jest wykonywany – jest to ustawienie z pliku konfiguracyjnego serwera.
HTTP_ACCEPT - Nagłówek z aktualnego zapytania, jeśli taki istnieje.
HTTP_ACCEPT_CHARSET - Zawartość nagłówka “Accept-Charset” z aktualnego zapytania, jeśli taki istnieje, np. ‘iso-8859-1,*,utf-8′.
HTTP_ENCODING - Zawartość nagłówka “Accept-Encoding” z aktualnego zapytania, jeśli taki istnieje, np. ‘gzip’.
HTTP_ACCEPT_LANGUAGE - Zawartość nagłówka “Accept-Language” z aktualnego zapytania, jeśli taki istnieje, np. ‘en’.
HTTP_CONNECTION - Zawartość nagłówka “Connection” z aktualnego zapytania, jeśli taki istnieje, np. ‘Keep-Alive’.
HTTP_HOST - Zawartość nagłówka “Host” z aktualnego zapytania, jeśli taki istnieje.
HTTP_REFERER - Adres strony (jeśli taka była), która wskazała przeglądarkę do tej strony. Wartość ta jest ustawiana przez przeglądarkę – nie wszystkie to robią.
HTTP_USER_AGENT - Zawartość nagłówka “User-Agent” z zapytania, jeśli taki istnieje. Jest to ciąg informujący o przeglądarce która została użyta do obejrzenia bieżącej strony, np. Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586). Można użyć funkcji get_browser() aby dopasować funkcjonalność strony do przeglądarki użytkownika.
REMOTE_ADDR - Adres IP z którego użytkownik połączył się z serwerem.
REMOTE_PORT - Port używany do komunikacji pomiędzy użytkownikiem a serwerem.
SCRIPT_FILENAME - Ścieżka do aktualnie wykonywanego skryptu.
SERVER_ADMIN - Wartość podana dla opcji SERVER_ADMIN w konfiguracji serwera WWW. Jeśli skrypt działa na wirtualnym serwerze, to będzie to wartość podana dla tego wirtualnego serwera.
SERVER_PORT - Port na serwerze którego użyto do połączenia. Dla normalnych połączeń będzie to ’80′.
SERVER_SIGNATURE - Ciąg zawierający wersję i nazwę wirtualnego hosta który jest dodawany do stron generowanych przez serwer.
SCRIPT_NAME - Zawiera ścieżkę do aktualnie wykonywanego pliku. Jest to przydatne do skyptów, które muszą wskazywać samego siebie.
REQUEST_URI - URI który został podany aby uzyskać dostęp do tej strony.
Zmienne ustawiane przez PHP
Argv - Tablica argumentów przkazywanych do skryptu. Jeśli skrypt jest uruchamiany z linii poleceń, to zmienna ta daję dostęp do argumentów w stylu języka C. Jeśli jest wywołany przez metodę GET, to zmienna ta zawierać będzie ciąg parametrów (query string).
Argc - Zawiera liczbę parametrów podanych podanych do skryptu w linii poleceń (jeśli skrypt został wywołany z linii poleceń).
PHP_SELF - Nazwa pliku aktualnie wykonywanego skryptu, względna do katalogu głównego dokumentów. Ta zmienna jest niedostępna jeśli PHP jest uruchamiany z linii poleceń.
HTTP_COOKIE_VARS - Tablica asocjacjna zmiennych przekazanych do skryptu przez HTTP cookies. Dostępna tylko jeśli włączone zostało śledzenie zmiennych przez ustawienie w konfiguracji PHP opcji track_vars lub komendą <?php_track_vars?>.
HTTP_GET_VARS - Tablica asocjacjna zmiennych przekazanych do skryptu przez metodę GET. Dostępna tylko jeśli włączone zostało śledzenie zmiennych przez ustawienie w konfiguracji PHP opcji track_vars lub komendą <?php_track_vars?>.
HTTP_POST_VARS - Tablica asocjacjna zmiennych przekazanych do skryptu przez metodę POST. Dostępna tylko jeśli włączone zostało śledzenie zmiennych przez ustawienie w konfiguracji PHP opcji track_vars lub komendą <?php_track_vars?>.
Przykład 5. Definiowanie stałych:
<?php
define("STALA", "Hello world.");
echo STALA; // Wyświetla "Hello world."
?>
Operatory
Przykład Nazwa Wynik
$a + $b Dodawanie Suma $a i $b.
$a – $b Odejmowanie Różnica $a i $b.
$a * $b Mnożenie Iloczyn $a i $b.
$a / $b Dzielenie Iloraz $a i $b (bez reszty).
$a % $b Modulo Reszta z dzielenia $a przez $b.
Operacja przypisania:
<?php
$nazwa = $inna_nazwa = $trzecia_nazwa = 5;
?>
Przykład Wynik
$a += 2 Do zmiennej $a dodane zostanie 2
$a -= 2 Od zmiennej $a odjęte zostanie 2
$a *= 2 Zmienna $a zostanie pomnożona przez 2
$a /= 2 Zmienna $a dodane podzielona przez 2
$a %= 2 Zmienna $a przyjmie wartość reszty z dzielenia $a przez 2
$a .= ” dalszy ciąg” Do zmiennej $a na końcu dodany zostanie ciąg ” dalszy ciąg”
Operacje bitowe
Przykład Nazwa Wynik
$a & $b AND Ustawiane są bity które są ustawione w obu zmiennych.
$a | $b OR Ustawiane są bity, które są ustawione w jednej lub drugiej zmiennej.
$a ^ $b XOR Ustawiane są bity, które są ustawione w jednej lub drugiej zmiennej, ale nie w obu.
~ $a NOT Inwerter – ustawiane są bity które nie są ustawione w zmiennej $a i odwrotnie.
$a << $b
Przesunięcie w lewo
Przesuń bity z $a $b-razy w lewo (każdy krok oznacza pomnożenie przez 2)
$a >> $b
Przesunięcie w prawo
Przesuń bity z $a $b-razy w prawo (każdy krok oznacza podzielenie przez 2)
Operatory porównania
Przykład Nazwa Wynik
$a == $b Równy Prawda jeśli $a jest równe $b.
$a === Identyczny Prawda jeśli $a jest równe $b i są tego samego typu. (tylko PHP4)
$b
$a != $b Nie równe Prawda jeśli $a nie jest równe $b.
$a !== $b Nie identyczny Prawda jeśli $a nie jest równe $b lub nie są tego samego typu. (tylko PHP4)
$a < $b Mniejsze Prawda jeśli $a jest mniejsze niż $b.
$a > $b Większe Prawda jeśli $a jest większe niż $b.
$a <= $b Mniejsze lub równe
Prawda jeśli $a jest mniejsze lub równe $b.
$a >= $b Większe lub równe
Prawda jeśli $a jest większe lub równe $b.
Operator kontroli błedów
Operator kontroli błędów (‘@’) powoduje, że wyrażenie przed którym postawiono ten znak nie spowoduje wyświetlenia się jakiegokolwiek błędu lub ostrzeżenia. Przykład 6:
<?php
/* Jeden z najczęstszych błędów SQL (za dużo o jeden apostrof) */
$res = @mysql_query ("select nazwa, kod from 'lista") or
die ("Zapytanie się nie powiodło: błąd to '$php_errormsg'");
?>
Inkrementacja i dekrementacja:
Przykład Nazwa Wynik
++$a Preinkrementacja Zwiększa $a o jeden, a następnie zwraca $a.
$a++ Postinkrementacja Zwraca $a, a następnie zwiększa $a o jeden.
–$a Predekrementacja Zmniejsza $a o jeden, po czym zwraca $a.
$a– Postdekrementacja Zwraca $a, po czym zmniejsza $a o jeden.
Operatory logiczne
Przykład Nazwa Wynik
$a && $b AND Prawda, jeśli $a i $b są prawdą
$a || $b OR Prawda, jeśli $a lub $b są prawdą
! $a NOT Prawda, jeśli $a nie jest prawdą
Operator ciągu (‘.’ – kropka) służy do łączenia kilku ciągów w jedną całość. Przykład 7:
<?php
$zmienna1 = "Wartość zmiennej 'zmienna2' to";
$zmienna2 = 5;
echo $zmienna1." ".$zmienna2;
?>
Instrukcje
Instrukcja Składnia Przykład
Instrukcja warunkowa IF <?php
if(wyrażenie_warunkowe)
instrukcja wykonywana
jeśli spełniony zostanie
warunek
elseif(inne_wyrażenie_warunk
owe)
instrukcja wykonywana
jeśli spełniony zostanie
drugi warunek, a pierwszy
nie
else
instrukcja wykonywana
jeśli nie zostanie spełniony
<?php
$a = 2;
$b = 5;
$c = 1;
if($a > $b)
echo "$a jest większe od
$b";
elseif ($b > $c)
echo "$b jest większe od
$c";
else
echo "$c jest większe od
$a i $b";
if($a)
żaden z warunków
?>
echo "Zmienna $a ma
wartość większą od zera";
?>
Pętla FOR <?php
for( inicjalizacja zmiennych
; sprawdzenie warunku ;
modyfikacja zmiennych) {
blok wyrażeń
}
?>
<?php
for( $x = 1; $x <= 10; $x++ )
echo $x."<br>";
?>
Pętla WHILE <?php
for( $x = 1; $x <= 10; $x++
)
echo $x."<br>";
?>
<?php
$x=1;
while($x <= 10){
echo $x."<BR>";
$x++;
}
?>
Pętla DO … WHILE <?php
do {
...
instrukcje
...
} while( warunek );
?>
<?php
$x=1;
do
{
echo $x."<BR>";
$x++;
} while($x <= 10);
?>
SWITCH
<?php
switch($zmienna){
case 'wartość1':
...
instrukcje
...
break;
case 'wartość2':
...
instrukcje
...
break;
default:
...
instrukcje
...
}
?>
<?php
$i = 3;
switch($i){
case 0:
case 1:
case 2:
case 3:
echo "Zmienna $i jest
mniejsza bądź równa od
trzech\n";
break;
case 4:
echo "Zmienna $i jest
równa cztery\n";
break;
default:
echo "Zmienna $i jest
większa od czterech\n";
}
?>
Przerwanie pętli
Przykład 11:
<?php
for($x = 1; $x<=100; $x++) {
if($x % 2 != 0)
continue; //tu przerywamy I przechodzimy to następnego kroku pętli
echo $x." ";
}
?>
Przykład 12:
<?php
for($x = 0; $x<10; $x++) {
if($x%2==0)
echo $x." ";
if($nazwa == "Test1")
break; //całkowite wyjście z pętli
}
?>
Przekazywanie danych między stronami
Formularze
Jeśli użytkownik musi podać jakieś dane (np. w celu dodania ich do bazy danych), to jedyną metodą jest pobranie ich ze standardowego formularza HTML. W większości języków programowania należy używać dodatkowych bibliotek aby uzyskać dostęp do danych przesyłanych z formularza. W PHP zostało to maksymalnie uproszczone. Wszystkie dane z formularza trafiają do odpowiednich tablic asocjacyjnych o nazwach kluczy takich, jak nazwy pól formularza. Jeśli w konfiguracji PHP włączona zostanie opcja register_globals (jest ona domyślnie wyłączona od wersji 4.2.0), to stworzone zostaną od razu zmienne o nazwach takich jak nazwy pól formularza.
Są dwie metody przekazywania parametrów do innych stron: metoda “GET” i metoda “POST”. Metody GET używa się kiedy parametrów jest niewiele. Dzieje się tak ponieważ parametry przekazuje się za pomocą adresu URL (np. http://www.cos.pl/strona.php?parametr1=wartość1¶metr2=wartość2), którego długość jest ograniczona. Należy też pamiętać że parametry są widoczne w pasku adresu przeglądarki, więc tej metody nie należy używać jeśli przekazywane są np. hasła. Metoda “POST” do przekazywania parametrów wykorzystuje nagłówek zapytania – wystarczy wiedzieć, że metoda ta umożliwia przekazywanie dużo większych parametrów, a także że parametrów nie widać w pasku przeglądarki.
Dane przesłane metodą GET trafiają do tablicy $_GET (lub $HTTP_GET_VARS w wersjach starszych niż 4.1.0) a dane z metody POST to tablicy $_POST (lub $HTTP_POST_VARS). Tablice $_GET i $_POST są superglobalne. Oznacza to, że są widoczne w każdym miejscu kodu PHP bez konieczności użycia składni globals.
Przykład 13
Plik jeden.html
<html>
<head>
<title>
Test formularza
</title>
</head>
<body>
<form action="dwa.php" method="GET">
Imię: <input type=text name="imie"/><br/>
Nazwisko: <input type=text name="nazwisko"/><br/>
Proszę o fakturę do zamówienia: <input type=checkbox name="faktura"/><br/>
Chcę zamówić:<br/>
<input type=radio name=zamow value="kola"/>Coca-colę<br>
<input type=radio name=zamow value="fanta"/>Fantę<br>
<input type=radio name=zamow value="sprite"/>Sprite'a<br>
<input type=submit value="Wyślij"/>
</form>
</body>
</html>
Plik dwa.php
<html>
<head>
<title>
Wyniki
</title>
</head>
<body>
Imię: <?php echo $_GET['imie']?><br>
Nazwisko: <?php echo $_GET['nazwisko']?><br>
Faktura: <?php echo ($_GET['faktura'] == 'on' ? 'Tak' : 'Nie')?><br>
Zamówienie: <?php switch($_GET['zamow']){
case "kola":
echo "Coca-cola";
break;
case "fanta":
echo "Fanta";
break;
case "sprite":
echo "Sprite";
break;
}
?>
</body>
</html>
Ładowanie plików
Często zachodzi też potrzeba przekazania jakiegoś pliku na serwer, na przykład dodając zdjęcie do galerii. Plik przesyła się korzystając z pola formularza typu “file”. Należy pamiętać o tym, że w tagu otwierającym formularz musi znaleźć się parametr ENCTYPE=”multipart/form-data” a formularz musi być wysyłany metodą POST. Na stronie do której został wysłany formularz dostępna będzie wielowymiarowa tablica asocjacyjna $_FILES ($HTTP_POST_FILES w starszych wersjach PHP), której pierwszym wymiarem będą pola typu file z formularza (klucze są nazwami tych pól), a w drugim informacje o przesłanym pliku.
Informacje o przesłanym pliku:
tmp_name - nazwa tego pliku na serwerze wraz ze ścieżką; używając tego pola można uzyskać dostęp do przesłanego pliku
name - nazwa pliku jaką posiadał u użytkownika
type - typ MIME pliku, np. text/plain lub image/gif; informacja ta jest dostępna tylko jeśli przeglądarka klienta dostarczyła takiej informacji.
size - wielkość pliku w bajtach
Przykład 14:
plik1.html:
<html>
<body>
<form action="plik2.php" method="POST" ENCTYPE="multipart/form-data">
<input type="file" name="plik"/><br/>
<input type="submit" value="Wyślij plik"/>
</form>
</body>
</html>
plik2.php:
<?php
$max_rozmiar = 1024*1024;
if (is_uploaded_file($_FILES['plik']['tmp_name'])) {
if ($_FILES['plik']['size'] > $max_rozmiar) {
echo 'Błąd! Plik jest za duży!';
} else {
echo 'Odebrano plik. Początkowa nazwa: '.$_FILES['plik']['name'];
echo '<br/>';
if (isset($_FILES['plik']['type'])) {
echo 'Typ: '.$_FILES['plik']['type'].'<br/>';
}
move_uploaded_file($_FILES['plik']['tmp_name'],
$_SERVER['DOCUMENT_ROOT'].'/foto/'.$_FILES['plik']['name']);
}
} else {
echo 'Błąd przy przesyłaniu danych!';
}
?>
Odnośniki
Istnieje możliwość przekazywania niedużej liczby parametrów za pomocą zwykłych odnośników dostępnych w języku HTML. W takim przypadku wykorzystuje się metodę GET: <a href=”strona.php?imie=Franek&nazwisko=Kowalski”>Kliknij tu</a>
Tablice
Tablice są bardzo specyficznym typem zmiennych – są to, najprościej mówiąc, zmienne zawierające w sobie uporządkowany zbiór zmiennych. Do zmiennych tych uzyskuje się dostęp przez liczbę w nawiasie kwadratowym podane bezpośrednio po nazwie zmiennej – tablicy. Liczba ta to tak zwany indeks – numer kolejny zmiennej w tablicy. Tak samo przypisuje się wartość do tablicy.
Przykład 15:
<?php
$tablica[0] = "Wpis numer 0";
$tablice[1] = "Wpis numer 1";
$tablica[2] = "Wpis numer 2";
echo $tablica[2]; // Wyświetlony zostanie napis "Wpis numer 2";
?>
Aby po prostu dodać kolejny wpis na końcu tabeli wystarczy przy przypisywaniu wartości nie wpisywać indeksu do nawiasów kwadratowych. Jeśli w ten sposób dodawane są wpisy do nowej tablicy, to pierwszy wpis ma indeks 0. Indeks można też podawać ze zmiennej, z innej tablicy czy funkcji – z dowolnego wyrażenia zwracającego wartość.
Przykład 16:
<?php
$tab1[] = 1;
$tab1[] = 0;
$tab1[] = 3;
$tab1[] = 2;
$tab2[] = "Pierwszy";
$tab2[] = "Drugi";
$tab2[] = "Trzeci";
$tab2[] = "Czwarty";
echo $tab2[$tab1[2]];
?>
Tablice asocjacyjne
W PHP występuje też inny rodzaj tablic, tak zwane tablice asocjacyjne (zwane też czasem haszami – hash table). Są to tablice, w których zamiast indeksów liczbowych używa się identyfikatorów znakowych (kluczy):
Przykład 17:
<?php
$tablica["imie"] = "Jan";
$tablica["nazwisko"] = "Kowalski";
$tablica["adres"] = "Polna 1";
echo $tablica["imie"]." ".$tablica["nazwisko"].", ul. ".$tablica["adres"]."n";
?>
Przeglądanie tablicy gdy nie znamy jest wielkości (liczby elementów) – wtedy można skorzystać z funkcji count( $nazwa_tablicy ). Zwraca ona ilość elementów w tablicy podanej jako parametr.
Przykład 18:
<?php
$tbl[] = 1;
$tbl[] = 2;
$tbl[] = 3;
$tbl[] = 4;
$tbl[] = 5;
for( $x = 0, $cnt = count($tbl); $x < $cnt; $x++ ){
echo $tbl[$x];
}
?>
Przeglądanie tablicy asocjacyjnej. Przykład 19:
<?php
$tablica["imie"] = "Jan";
$tablica["nazwisko"] = "Kowalski";
$tablica["adres"] = "Polna 1";
while( list($klucz, $wartosc) = each($tablica) )
echo "$klucz => $wartosc<BR>";
?>
Sortowanie tablic
PHP ofertuje cały zestaw funkcji służących do sortowania tablic. Są to:
asort() - sortuje tablice asocjacyjne zachowując przypisanie kluczy do wartości
arsort() - sortuje w odwrotnej kolejności tablice asocjacyjne zachowując przypisanie kluczy do wartości. Funkcja prawie identyczna jak poprzednia, tyle że dane sortowane są “od tyłu”
ksort() - sortuje tablice asocjacyjne według kluczy.
rsort() - sortuje zwykłe tablice (nie asocjacyjne) w odwróconej kolejności
sort() - sortuje zwykłe tablice (nie asocjacyjne) w kolejności alfabetycznej
uasort() - funkcja sortująca tablice asocjacyjne za pomocą zdefiniowanej przez użytkownika funkcji porównującej elementy (nazwa funkcji jest podawana za pomocą drugiego parametru)
usort() - funkcja sortująca zwykłe tablice za pomocą funkcji zdefiniowanej przez użytkownika
uksort() - funkcja sortująca tablice asocjacyjne według klucza za pomocą funkcji zdefiniowanej przez użytkownika.
Tworzenie ciągów z tablic i odwrotnie
Przykład 20 (wykorzystanie średnika jako rozdzielenia danych):
<?php
$dane = "12/11/2000;19:23:33;Netscape Navigator;192.168.1.1";
$tablica = explode(";", $dane);
?>
Jest także rozszerzona wersja funkcji explode: split(). Różni się ona tym, że zamiast prostego ciągu znaków rozdzielających pola, akceptuje ona wyrażenia regularne.
Przykład 21 (operacja odwrotna – tworzenie ciągu z tablicy)
<?php
$dane = implode(";", $tablica);
?>
Funkcje
Funkcja jest kawałkiem kodu, który można wywołać podając jej nazwę. Już wcześniej podane zostało kilka funkcji dostarczanych przez PHP, takich jak array(), each(), list(), explode() czy implode(). Jak można zauważyć, funkcje rozpoznaje się po nawiasach występujących po ich nazwie. W nawiasach tych (jeśli funkcja tego wymaga) podaje się parametry dla danej funkcji. Niektóre funkcje zwracają jakąś wartość, a więc wywołanie takiej funkcji można wstawić jak dowolne inne wyrażenie do listy parametrów innej funkcji czy np. do obliczenia.
Przykład 22 (własna funkcja obliczająca sumę)
<?php
function suma($parametr1 = 0, $parametr2 = 0)
{
$wartosc = $parametr1 + $parametr2;
return $wartosc;
}
?>
Klasy
Przykład 23 (klasa koszyk)
<?php
// Początek definicji klasy Koszyk - definiującej koszyk sklepowy
class Koszyk
{
// Definicja zmiennej - tablicy asocjacyjnej zawierającej numery artykułów i
// ich ilość
var $artykuly;
// Metoda dodająca podaną ilość artykułów do koszyka
function dodaj($numer, $ilosc)
{
$this->artykuly["$numer"] += $ilosc;
}
// Metoda usuwająca podaną ilość artykułów z koszyka
function usun($numer, $ilosc)
{
if($this->artykuly["$numer"]>$ilosc)
$this->artykuly["$numer"]-=$ilosc;
else
$this->artykuly["$numer"]=0;
}
// Metoda wyświetlająca zawartość koszyka
function wyswietl()
{
while(list($k, $v) = each($this->artykuly))
if($v>0)
echo "Artykul nr $k - $v sztuk<br>";
}
}
// Przykład wykorzystania
$koszyk = new Koszyk;
$koszyk->dodaj('20', 2);
$koszyk->dodaj('12', 4);
$koszyk->dodaj('20', 5);
$koszyk->usun('12', 4);
$koszyk->wyswietl();
?>
Dziedziczenie – Przykład 24
<?php
class Nazwany_koszyk extends Koszyk{
var $nazwa;
function ustaw_nazwe($nowa_nazwa)
{
$this->nazwa = $nowa_nazwa;
}
}
$koszyk = new Nazwany_koszyk;
$koszyk->ustaw_nazwe('Fredzio');
$koszyk->dodaj('2', 34);
echo 'Właściciel: '.$koszyk->nazwa.'<br/>';
$koszyk->wyswietl();
?>
Zastosowanie konstruktora klasy:
<?
class Auto_koszyk extends Nazwany_koszyki
{
function Auto_koszyk( $nazwa = 'Anonim')
{
$this->ustaw_nazwe($nazwa);
}
}
$koszyk = new Auto_koszyk('Jakiś właściciel');
$koszyk->dodaj('4', 30);
echo 'Właściciel: '.$koszyk->nazwa.'<br/>';
$koszyk->wyswietl();
?>
Include i require
W PHP istnieją dwie instrukcje, które pozwalają włączyć do kodu zawartość innego pliku także zawierającego kod PHP. Obu tym instrukcjom podaje się jeden parametr – nazwę pliku do włączenia do kodu (może to być ścieżka do pliku znajdującego się na innym serwerze WWW). Różnica między nimi polega na sposobie włączania tych plików do kodu. W przypadku instrukcji require pliki dołączane są do kodu jeszcze przed parsowaniem, w każdym miejscu gdzie znajduje się instrukcja require. Dlatego instrukcja ta nie nadaje się do dołączania plików których nazwa pobierana jest ze zmiennej – zamiast tego należy użyć instrukcji include. Używając tych instrukcji należy pamiętać o dwóch rzeczach. Po pierwsze, przetwarzanie plików zaincludowanych zaczyna się od trybu HTML, a więc jeśli plik zawiera tylko kod PHP, to powinien zaczynać się od jednego ze znaczników otwierających. Po drugie należy pamiętać, że jeśli instrukcja include używana jest w pętli lub instrukcji warunkowej, to pomimo że jest to teoretycznie jedna linia, to musi znajdować się ona w nawiasach klamrowych, ponieważ ta pojedyncza linia zamieniana jest na wiele linii dołączanych z innego pliku.
Funkcja readfile()
Innym typem funkcji służącej do dołączania treści zawartych w innym pliku jest funkcja readfile(). Rzeczą odróżniającą tą funkcję od instrukcji zawartych w poprzednim punkcie jest to, że dane pobrane z pliku nie są przetwarzane przez PHP, więc funkcja ta nadaje się tylko do wyświetlania plików HTML bądź czysto tekstowych.