Zacznijmy kurs

Wyrażenia

Rozdział 14. 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:

<?php
function foo ()
{
    return
5;
}
?>

Zakładając że oswoił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 znacznie bardziej, podobnie jak wiele innych języków programowania. PHP jest językiem zorientowanym na wyrażenia, co oznacza że prawie wszystko 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', a także 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 orientacji wyrażeniowej jest pre- i postinkrementacja i 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/FI 2 instrukcja '$a++' nie ma wartości (nie jest wyrażeniem), więc nie możesz jej przypisać lub użyć w jakikolwiek sposób. PHP rozszerza możliwości inkrementacji/dekrementacji robiąc także z nich wyrażenia, podobnie jak w C. 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:

<?php
$pierwsze
? $drugie : $trzecie
?>

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ń:

<?php
function double($i)
{
    return
$i*2;
}
$b = $a = 5;        /* przypisz wartość pięc do zmiennej $a i $b */
$c = $a++;          /* postinkrementuj, przypisz początkową wartość
                       $a (5) do $c */
$e = $d = ++$b;     /* preinkrementuj, przypisz zwiększoną wartość
                       $b (6) to $d i $e */

/* w tym momencie i $d i $e są równe 6 */

$f = double($d++);  /* przypisz podwojoną wartość $d przed
                       inkrementacji, 2*6 = 12 do $f */
$g = double(++$e);  /* przypisz podwojoną wartość $e po
                       inkrementacji, 2*7 = 14 do $g */
$h = $g += 10;      /* na początku $g jest zwiększane o 10 i przyjmuje
                       wartość 24; wartość przypisania (24) jest później
                       przypisywana do $h, które przyjmuje wartość 24. */
?>

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.



Wątki z forum o php

Najnowsze posty naszych userów

nie wcza sie cakowicie instalator systemu win xp.
witam, chc mojej dziewczynie sformatowa komputer, po ustawieniu kolejnoci bootowania, resetuje komputer, wkadam plyte z windowsem, i pojawia sie czarny ekran z informacja, ze wlacza sie instalator windows, potem pojawia sie niebeiski ekran z napisem instalator rozpakowywuje pliki i wtym momencie komputer staje, dysk przestaje sie krecic i naped tez, cos jakby zawieszka, dzieje sie to zarowno w przypadku winxp 1 wer. jak i ta z sp2. prosze o pomoc,

plyta glowna ECS, proc. Athlon 1GHz.
dual layer czy Double layer
Witam


Patrz w everest jakie pyty obsuguje moja nagrywarka dvd.I przy jednej opcji pisze DVD+R9 Dual Layer czym si rzni od duble layer?I czy mog kupi pytki duble layer aby je nagra? czy musz by dual layer



Kaszanka dobra do wszystkiego [+18]
Drogie Bravo, drodzy koledzy i koleanki.Mam na imi Dagmara i mam 19 lat. Moja sytuacja jest bardzo krepujca i nie wiem co teraz mam zrobi. Jestem ju doros dziewczyn i mam wspaniaego chopaka o imieniu Marcin, ktrego kocham ponad ycie i myl ze on odwzajemnia moje uczucie. Jestemy ju razem 6 miesicy i postanowilimy dokona Aktu Miosnego, aby umocni nasz zwizek. Nie fart polega na tym e ja jestem dziewic, a z tego co wiem On jest ju dowiadczonym mczyzn. Bardzo obawiaam si e nie speni jego oczekiwa , po prostu zawiod! Na dodatek wszystkie moje koleanki potraciy ju dziewictwo i eby mie o czym rozmawia z nimi, powiedziaam e ja rwnie nie jestem jak to si mwi potocznie "cnotk". O tym fakcie dowiedzia si Marcin od mojej koleanki, Moniki, ktra jest jego dobr znajom. Gdy Marcin zapyta czy to prawda nie zaprzeczyam. Ustalilimy nasz Pierwszy Raz na najbliszy weekend, poniewa Marcina rodzice jad na wesele. Bardzo si obawiaam blu, oraz tego e Marcin posdzi mnie o kamstwo, wic postanowiam jako sobie poradzi. Nie chciaam przespa si z "pierwszym lepszym" gdy kocham Marcina i chc aby to on by moim Pierwszym Mczyzn!! Akurat zdarzyo si tak e byam sama w domu i postanowiam upora si z moja bona dziewicz. Nie chciaam robi tego palcami ani jakim twardym przedmiotem a na wibrator niestety nie byo by mnie sta. Poszam wic do lodwki i zobaczyam nadajc si do mojego czynu kaszank. Odpowiadaa mi rozmiarem i gruboci, bya troch za zimna i za twarda wic postanowiam ja podgotowa. Kiedy nareszcie ostyga, nasmarowaam ja wazelin, i zaczam wkada j do pochwy. Poddaam si chyba za bardzo chwili i za bardzo j cisnam. Wtedy stao si najgorsze co mogo si sta!! KASZANKA SI ZAMAA!!!!!!!!!!Rozpaczliwie prbowaam j wyj palcami ale chyba troch za bardzo j rozgotowaam i niektre kawaki kaszanki zostay mi w pochwie i nie mog ich wyj! Wstydz si i do ginekologa a za kilka dni wyczekiwany przez nasz dwjk upojny weekend!! Nie wiem co mam zrobi i do kogo si zwrci. Co teraz pomyli o mnie Marcin!! BAGAM POMӯCIE!!!!!
Zrozpaczona

Odpowied Bravo:
Na wstpie pragniemy podzikowa Ci za podzielenie si z nami swoim problemem. W twojej nader ciekawej sytuacji proponujemy Ci dwa rozwizania:
1. Ekstrawaganckie w stylu new art.
2. Siowe

Pierwsze wydaje nam si ciekawe lecz moe nie przynie spodziewanych efektw. Musisz pokroi cebul w kostk, a nastpnie podsmay j na zocisty kolor na patelni (koniecznie na oleju z pierwszego tloczenia). Nastpnie musisz dopcha j do pochwy i zrobi 3-4 przysiadw tak aby zmieszaa si z kaszank. Potem zapro swojego ukochanego na romantyczne spotkanie inicjujce. Przed pierwszym stosunkiem zaproponujesz mu wic kaszank po staropolsku w wersji francuskiej. W ten sposb osigniesz dwa cele: udowodnisz mu, e bardzo go kochasz i jednoczenie pokaesz, e wietnie gotujesz. Przypominamy Ci powiedzenie "PRZEZ ODEK DO SERCA".

Rozwizanie drugie jest jednak o wiele bardziej skuteczne. Przygotuj patelni na ktrej miaa zarumieni cebulk. Nastpnie we j w praw rk (jeli jeste leworczna to w lew) i [beeep]nij si ni z caej siy w gow - bo tobie to ju chyba nic nie pomoe!
Z powaaniem Redakcja


Problemem bylo to, ze autor nie pozostawil mozliwosci zmian, wiec za pomoca programu PHP WebPage Editor zmienilem pewne potrzebne mi wartosci (ilosci wojsk - to akurat bylo latwe do znalezienia...), ale nie wiem, ktore wartosci odpowiadaja za czas wysylania tych jednostek wojska - chce zmienic z tych kilkunastu sekud na ok 1,5 godz... (to dziwne, bo nie jest to regularne - niektore ataki wychodza co 10 sek, niektore co 15 albo 20.