Wyrażenia
Wyrażenia są naważniejszymi elementami składowymi PHP. W PHP prawie
wszystko co napiszesz jest wyrażeniem. Najprostszą i najdokładniejszą
definicją wyrażenia jest "wszystko co ma wartość".
Najbardziej podstawową formą wyrażeń są stałe i zmienna. Jeśli napiszesz
"$a = 5" przypisujesz '5' do $a. '5' ma oczywiście wartość 5, lub innymi
słowy '5' jest wyrażeniem o wartości 5 (w tym przypadku, '5' jest stałą
liczbą całkowitą).
Po tym przypisaniu możesz się spodziwać, że wartością $a jest także 5, więc
jeśli napiszesz "$b = $a" możesz się spodziewać, że będzie to równoznaczne
z napisaniem "$b = 5". Innymi słowy, $a jest wyrażeniem o wartości 5.
Jeśli wszystko działa prawidłowo, wszystko będzie się dziać tak jak
napisano wyżej.
Trochę bardziej złożonymi przykładami wyrażeń są funkcje. Przyjrzyj się
poniższej funkcji:
Zakładając, że zapoznałeś się z koncepcją funkcji (jeśli nie, przejrzyj
najpierw rozdział o funkcjach),
możesz założyć, że napisanie $c = foo() jest
równoznaczne z napisaniem $c = 5, i masz racię. Funkcje
są wyrażeniami o wartości którą zwracają. Ponieważ foo() zwraca 5,
wartością wyrażenia 'foo()' jest 5. Zazwyczaj funkcje nie zwracają
statycznej wartości, ale coś obliczają.
Oczywiście wartości w PHP nie muszą być liczbami całkowitymi, i bardzo
często nie są nimi. PHP obsługuje 3 skalarne warotści danych: wartości
całkowite (integer), wartości rzeczywiste (float
i ciągi znaków (string) (wartości skalarne
to takie, których nie możesz 'rozbić' na mniejsze kawałki, w
przeciwieństwie do np. tablic). PHP obsługuje także dwa złożone
(nieskalarne) typy danych: tablice i obiekty. Każdą z tych wartości można
przypisać do zmiennych lub może być zwrócona przez funkcję.
PHP rozwija wyrażenia prawdopodobnie znacznie bardziej, niż wiele innych języków
programowania. PHP jest językiem wyrażeń, co oznacza
że prawie wszystko w nim jest wyrażeniem. Przyjrzyj się przykładowi, który już
analizowaliśmy, '$a = 5'. Łatwo jest zauważyć, że są tu dwie wartości.
Wartość stałej całkowitej '5' oraz wartość $a, która zostanie
zamieniona na 5. Ale tak naprawdę jest tu jeszcze jedna wartość, którą
jest wartość operacji przypisania. Przypisanie przyjmuje wartość
przypisywanej wartości, w tym przypadku 5. W praktyce oznacza to, że '$a =
5', niezależnie co to robi, jest wyrażeniem o wartości 5. Wynika z tego,
że napisanie '$b = ($a = 5)' jest
równoznaczne napisaniu '$a = 5; $b = 5;'
(średnik oznacza koniec instrukcji). Ponieważ przypisania są przetwarzane
od prawej do lewej, możesz także napisać '$b = $a = 5'.
Kolejnym dobrym przykładem korzystania z wyrażeń jest pre- i
postinkrementacja, a także dekrementacja. Użytkownicy PHP i wielu innych
języków mogą być już zaznajomieni z notacją zmienna++ i zmienna--. Są to
operatory inkrementacji i
dekrementacji. W PHP, tak jak w C, sa dwa typy
inkrementacji: preinkrementacja i postinkrementacja. I pre- i
postinkrementacja zwiększają wartość zmiannej, więc efekt w stosunku do
zmiennej jest taki sam. Różnica jest w wartości wyrażenia inkrementacji.
Preinkrementacja, która jest oznaczana jako '++$zmienna', zwraca
zwiększoną wartość (PHP zwiększa zmienną przed odczytaniem wartości,
dlatego nazywa się to 'pre-inkrementacją'). Postinkrementacja, która jest
oznaczana jako '$zmienna++', zwraca orginalną wartość $zmienna przed
zwiększeniem jej wartości (PHP zwiększa wartość po odczytaniu jej
wartości, stąd nazwa 'post-inkrementacja').
Popularnym typem wyrażeń są porównania. Wyrażenia te
zwracają wartość FALSE
lub TRUE
. PHP
obsługuje > (większy), >= (większy lub równy), == (równy), != (nie
równy), < (mniejszy) i <= (mniejszy lub równy). Język obsługuje
także zbiór operatorów ścisłego porównania: === (równy i tego samego typu)
i !== (nie równy lub różnego typu). Wyrażenia te są powszechnie używane
przy sprawdzaniu warunków, jak na przykład instrukcje
if.
Ostatnim przykładem, którym będziemy się tu zajmować są połączone
wyrażenia operacji i przypisania. Już wiesz, że jeśli chcesz zwiększyć
wartość zmiennej $a o 1, możesz po prostu napisać
'$a++' lub '++$a'. Ale
co jeśli chcesz dodać do niej więcej niż jeden, na przykład 3? Mógłbyś
napisać wielokrotnie '$a++', ale nie jest to sposób ani efektywny ani
wygodny. Częściej spotykane jest używanie instrukcji '$a =
$a + 3'. '$a +
4' zwraca wartość zmiennej $a plus 3, która jest przypisywana z powrotem do
$a, co oznacza zwiększenie wartości zmiennej $a o 3. W PHP, tak jak kilku
innych językach jak na przykład C, możesz napisać to krócej, co z czasem
stanie się także bardziej przejrzyste i łatwiejsze do zrozumienia. Dodanie
4 do bieżącej wartości $a może być zapisane jako
'$a += 4'. Oznacza to
dokładnie "weź wartość $a, dodaj do niej 3 i przypisz ją z powrotem do $a".
Oprócz bycia krótszą i bardziej przejrzystą, instrukcja ta jest także
szybsza w wykonaniu. Wartość '$a += 5', tak jak wartość zwykłego
przypisania, jest przypisywaną wartością. Zauważ, że NIE jest to 4, ale
połączona warotść $a i 4 (jest to wartość która jest przypisywana do $a).
Dowolne dwuoperandowe operatory mogą być użyte w trybie
operacji-przypisania, na przykład '$a -= 5' (odejmij 5 od wartości $a),
'$b *= 7' (pomnóż wartość $b przez 7), itp.
Jest jeszcze jedno wyrażenie, które może się wydać dziwne jeśli nie
widziałeś go w innych językac, trójoperandowy operator warunkowy:
Jeśli wartością pierwszego podwyrażenia jest TRUE
(rózna od zera), to
zwracany jest drugie podwyrażanie, i jest to wynik wyrażenia warunkowego.
W przeciwnym wypadku, zwracana jest wartość trzeciego podwyrażenia.
Poniższy przykład powinien pomóc w lepszym zrozumieniu pre- i
postinkrementacji i ogólnie koncepcji wyrażeń:
Na początku rozdziału powiedzieliśmy, że będziemy opisywać różne typy
instrukcji, i tak jak obiecywaliśmy, wyrażenia mogą być instrukcjami.
Jednakże nie każde wyrażenie jest instrukcją.
Niektóre wyrażenia mogą być instrukcjami. Ten przypadek ma postać
'wyrażenie ;', czyli wyrażenie a po nim średnik. W '$b = $a = 5;',
'$a = 5' jest poprawnym wyrażeniem, ale nie jest instrukcją.
Jednakże '$b = $a = $b;' jest poprawną intrukcją.
Ostatnią rzeczą wartą uwagi jest wartość prawdy wyrażeń. W wielu
przypadkach, głównie przy sprawdzaniu warunkow i w pętlach, nie interesuje
cię wartość wyrażenia, ale tylko czy oznacza TRUE
czy FALSE
.
Stałe TRUE
i FALSE
(niezależne od wielkości znaków) są dwiema
możliwymi wartościami logicznymi. Kiedy to konieczne, wyrażenie jest
automatycznie konwertowane na typ boolean. Zobacz
rozdział o rzutowaniu typów
jeśli interesują cię szczegóły jak to jest przeprowadzane.
PHP dostarcza pełnej i potężnej implementacji wyrażeń i całkowita ich
dokumentacja przekracza ramy tego podręcznika. Powyższe przykłady powinny
dać ci ogólne pojęcie czym są wyrażenia i jak możesz konstruować przydatne
wyrażenia. Przez resztę podręcznika będziemy pisać
expr aby oznaczyć dowolne poprawne wyrażenie
PHP.