Operatory i wyrażenia w PHP

Autor: Grzegorz Winiarski, dodano: 04-03-2004
Kategoria: Programowanie i tworzenie

Operatory i wyrażenia są jednymi z podstawowych elementów każdego języka programowania. Jak można przeczytać w manualu PHP jest językiem zorientowanym na wyrażenia' i właśnie w tym artykule postaram się pokazać jak z nich efektywnie korzystać.

Najprostsza definicja wyrażenia jest następująca: wszystko co przyjmuje jakąś wartość jest wyrażeniem. Trywialnym przykładem jest taki oto zapis.


$a = 5;


Do zmiennej $a zostaje przypisana wartość 5, a wiec wszystko zgodnie z nasza definicją.
Jak nietrudno się domyślić funkcje również są wyrażeniami, oto przykład.


function podwojenie($liczba) {
$liczba *= 2;
return $liczba;
}
$a = podwojenie(5);



Można powiedzieć, ze funkcje są wyrażeniami o wartości, którą zwracają, brzmi to trochę nie po polsku, ale niestety taka jest najprostsza definicja. Oczywiście może być sytuacja w której funkcja nie zwraca żadnej wartości, ale to już inna historia i nie będziemy się tym tutaj zajmować.
Wróćmy do 'zwykłych' wyrażeń, co jeszcze warto o nich wiedzieć? Przede wszystkim, że przypisania są czytane od prawej strony, żeby lepiej to zobrazować zobaczmy przykład.


$c = 2+2;
echo $c; // wypisuje na ekranie 4
$b = 32-22+10;
echo $b; // wypisuje 20
$a = 2*2+4;



Najpierw wykonywane jest działanie po prawej stronie, a następnie wynik działania jest przypisywany do zmiennej $a. Według tego, co zostało napisane wcześniej wynik tego działania powinien być 12 (od prawej do lewej czyli najpierw 4+2, potem razy 2) tymczasem $a przyjmuje wartość 8. Dzieje się tak dlatego, że każdy z operatorów ma określony priorytet. Zgodnie z prawami arytmetyki mnożenie jest wykonywane przed dodawaniem. Podobnie jak w matematyce wyższy priorytet maja działania w nawiasach, odnosi się to nie tylko do wyrażeń przypisania ale również do instrukcji warunkowych i pętli. Zobaczmy kilka przykładów, ale wcześniej poznamy parę istotnych operatorów.
Operatory logiczne.
$x || $y - logiczne $x lub $y
$x && $y - logiczne $x i $y
Operatory porównania
$x == $y - sprawdzenie równości dwóch zmiennych, jeśli są równe zwracane jest TRUE
$x != $y - sprawdzenie równości zmiennych, zwraca TRUE jeżeli zmienne nie s równe
$x < $y - x mniejsze niż y
$x <= $y - x mniejsze lub równe y
$x > $y - x większe niż y
$x >= $y - x większe lub równe y
Operatory przypisania
$x += $y - można to inaczej zapisać $x = $x + $y
$x -= $y - to samo co $x = $x - $y
$x *= $y - to samo co $x = $x * $y
$x /= $y - to samo co $x = $x / $y
$x %= $y - może to jedno wymaga wyjaśnienia, taki zapis oznacza ze do zmiennej $x zostaje przypisana reszta z dzielenia $x przez $y, jest to tak zwane dzielenie modulo
Na razie wystarczy tyle, oczywiście jest ich dużo więcej, pełną listę można znaleźć pod adresem php.net, będąc już na tej stronie, warto również poczytać o priorytetach.
Teraz zgodnie z obietnicą przykłady.


if($x>10 || $y==50) {
if($x<100 || $y==50) {

}
}



Jak widać ten kod jest dość długi i do tego mało czytelny, ale na szczęście wiemy o nawiasach dzięki czemu powyższe instrukcje możemy zapisać w jednej linii.


if(($x>10 && $x<100) || $y==50) {
...
}



Różnice widać od razu, co więcej dzięki drugiemu zapisowi kod stał się czytelniejszy, a działanie jest takie samo, kto nie wierzy może sprawdzić. Warunek ten jest spełniony gdy $x należy do przedziału od 10 do 100 lub gdy $y jest równe 50. Natomiast gdyby pominąć wewnętrzne nawiasy to warunek byłby spełniony w dwóch przypadkach.
1) $x większe niż 10 i mniejsze niż 100
2) $x większe niż 10 i $y równe 50

Pamiętając ze operacja przypisania wykonywana jest od prawej strony rozważmy następujący przykład.
$a = ($b=($c=2)*4)+5;
Jakie wartości przyjmują zmienne? Pomimo złożonego zapisu jest to dość proste, $c jest równe 2 tu nie ma wątpliwości. W takim razie $b = 2*4 czyli 8. Natomiast $a = 8+5.

Przejdźmy do operatorów przypisania.


$b = 5; $c = 2; $d = 10;
$a = ($b += ($c *=5))+$d/=2;


Jakie tu mamy wartości? $d wynosi 10 podzielić na 2, $c równa się 5*2=10, $b to 5 plus $c czyli 5+10=15, natomiast $a to po prostu $b + $d, a więc 20.
Stosując poznane zasady można w prosty sposób skrócić kod, zastanówmy się jak wyglądałby ten kod gdyby nie było nawiasów oraz operatorów przypisania?


$b = 5; $c = 2; $d = 10;
$d = $d/2;
$c = $c*5;
$b = $b+$c;
$a = $b+$d;



Z dwóch linijek zrobiło nam się pięć, podobnie jak w poprzednim przykładzie różnica jest diametralna.

Przejdźmy do inkrementacji i dekrementacji, zapisujemy je tak.
$a++ postinkrementacja, można to inaczej zapisać $a = $a+1, postinkrementacja najpierw przypisuje wartość zmiennej, a następnie zwiększa ja o 1, brzmi to trochę dziwnie, ale przykład powinien wszystko wyjaśnić.
++$a preinkrementacja, działanie jest podobne z tym ze najpierw zmienna jest zwiększona o 1, a następnie zostaje jej przypisana wartość.
$a-- postdekrementacja
--$a predekrementacja
działanie tych dwóch ostatnich jest analogiczne do operatorów inkrementacji tyle tylko, że wykonywane przez nie działanie ma postać $a = $a-1.


$a = 2;
echo $a++."<br>"; // wyświetla 2 ale wartość zmiennej jest 3
echo ++$a."<br>"; /* wynik jest 4 ponieważ zmienna najpierw została zwiększona a potem przypisano jej wartość*/
echo $a--."<br>"; //wynik 4
echo --$a."<br>"; //wynik 2



Jak pewnie zauważyłeś użyłem tu nowego operatora '.' służy on do łączenia łańcuchów znaków, zobaczmy przykład:


$a = "kilka";
$a .= " znaków";
echo $a;



Skrypt wyświetli napis 'kilka znaków', jak widać tekst jest dołączany z prawej strony, warto o tym pamiętać.
Na koniec zostawiłem 2 rzadko wspominane operatory, pierwszy z nich służy do kontroli błędów oznaczamy go małpą '@'. Postawiony przed dowolnym wyrażeniem ukrywa generowany przez nie błąd.
$a = @file('plik');
Podany plik nie istnieje, wiec PHP wygeneruje błąd, ale dzięki 'małpie' nie zostanie on wyświetlony na ekranie. Nie polecam używania tego operatora w trakcie testowania skryptu ze względu na to, że ukrywa nawet błędy parsowania, przez co odnalezieniu błędu może stać się bardzo trudne.
Został nam jeszcze operator wykonania polecenia systemowego oznaczamy go apostrofem wstecznym (``). Wynik operacji zostanie zwrócony do zmiennej, oczywiście, aby móc z niego skorzystać PHP musi działać w trybie safe_mode = off.


/* to zadziała tylko pod windowsem */
$a = `dir –w`;



Oczywiście operatorów jest dużo więcej, pełną listę znajdziesz w manualu. Zachęcam do zapoznania się z nimi gdyż w przyszłości ta wiedza na pewno ułatwi Ci prace, poza tym podobne prawa rządzą innymi językami programowania np. C, C++ wiec nauka nie pójdzie na darmo.

Ocena 2.82/5 (56.46%) (401 głosów)

Komentarze:



    Dodaj komentarz:


    Temat:
    Twój nick:
    Komentarz:
     

    Prosimy o kulturę wypowiedzi. Komentarze zawierające niecenzuralne zwroty, bądź obrażające inne osoby będą usuwane. Kod HTML w wypowiedziach jest niedozwolony. Wydawca nie odpowiada za treść komentarzy.