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)...