Hittills i skolan har vi gått igenom variabelhantering, operatorer och dylikt. Nu höjer vi svårigheten ett snäpp och ger oss i kast med villkorssatser. Dessa satser som ibland kallas för hoppsatser sköter beslutstagningen i dina skript. Är du gammal C++-programmerare kommer du känna igen syntaxen då den är densamma.
Det finns två stycken villkorssatser i PHP, vi börjar med den vanligaste som är If-satsen.
If-satsen
Översatt från engelskan betyder ordet 'if' om. Det är just så den fungerar, om någonting är på ett speciellt sätt görs det. För att få reda på om det är på ett speciellt vis används de jämförande och logiska operatorerna som vi gick igenom i föregående kapitel. Vi fortsätter med ett exempel. Här kontrollerar vi om ett är mindre än två, det är det givetvis och kodblocket (allt mellan måsvingarna ({ och }) körs.
Exempel
1: <?php 2: 3: if ( 1 < 2 ) { // Tecknet "{" påbörjar blocket med kod 4: echo 'Två rader i kroppen<br />'; 5: echo 'Och 1 är fortfarande mindre än 2'; 6: } // Tecknet "}" avslutar blocket med kod 7: 8: ?>
|
Nu jämför du aldrig två heltal utan då används variabler eller returvärden från funktioner.
Exempel
1: <?php 2: 3: /* 4: Vi anropar först en funktion som skickar tillbaka ett slumpat heltal. Koden är inte körbar eftersom vi inte skapat funktionen geMigEttHeltal(). 5: */ 6: 7: $a = geMigEttHeltal(); 8: $b = 3; 9: 10: if ( $a < $b ) { 11: /* Är $a mindre än $b kommer blocket köras */ 12: echo 'Blocket körs.'; 13: } 14: 15: ?>
|
Du kan också gardera dig för att $a inte är mindre än $b. För att åstadkomma detta måste vi göra ett tillägg till den form som vi skrivit de två första exemplen på.
Exempel
1: <?php 2: 3: if ( $a < $b ) { 4: echo "$a är mindre än $b"; 5: } else { 6: echo "$a är större eller lika med än $b"; 7: } 8: 9: ?>
|
'Else' är ju engelskans ord för 'annars' och det sammanfattar ganska så bra hur satsen fungerar i PHP. Stämmer inte uttrycket i if-satsen (om det inte ger sant) körs else-satsen.
Innan vi går vidare till switch-satsen skall vi ge ett exempel på hur du kan testa fler villkor. Det gör man genom 'if-else if' konstruktionen.
Exempel
1: <?php 2: 3: $land = 'Danmark'; 4: 5: if ($land == 'Sverige') { 6: echo 'Landet du sökte var Sverige'; 7: } elseif ($land == 'Danmark') { 8: echo 'Landet som du sökte var Danmark'; 9: } elseif ($land == 'Norge') { 10: echo 'Landet som du sökte var Norge'; 11: } else { 12: echo 'Inget resultat'; 13: } 14: 15: ?>
|
Exemplet får avsluta denna genomgång av if-satsen.
Switch-satsen
Switch-satsen kan med fördel användas som komplement till if-satsen vid vissa tillfällen. If-satsen är mycket bra att använda om du inte alls vet värdet på en variabel, vet du vad variabeln kan innehålla kan switch-satsen vara att föredra. Skall man testa många olika möjligheter blir det också renare kod om du använder en switch-sats.
Exempel
1: <?php 2: 3: switch($gor) { 4: case 'spara': 5: /* Nu körs kod för att spara ner information, 6: exempelvis i en databas */ 7: break; 8: 9: case 'radera': 10: /* Nu raderas viss information */ 11: break; 12: 13: default: 14: /* Denna körs om $gor inte är 'spara' eller 'radera' */ 15: break; 16: } 17: 18: ?>
|
Ovan såg du ett exempel som testade variabeln $gor. Innehöll den strängen 'spara' kördes ett speciellt kodblock. Skulle den innehålla 'radera' kördes ett annat kodblock, skulle den innehålla varken 'spara' eller 'radera' kördes kodblocket under default.
Jag visar nedan samma funktionalitet men med hjälp av en if-sats.
Exempel
1: <?php 2: 3: if ($gor == 'spara') { 4: /* Nu körs kod för att spara ner information, 5: exempelvis i en databas */ 6: } else if ($gor == 'radera') { 7: /* Nu raderas viss information */ 8: } else { 9: /* Denna körs om $gor inte är 'spara' eller 'radera' */ 10: } 11: 12: ?>
|
Switch går givetvis också att använda på heltal.
Exempel
1: <?php 2: 3: switch ($tal) { 4: case 1: 5: echo '$tal har värdet 1'; 6: break; 7: 8: case 2: 9: echo '$tal har värdet 2'; 10: break; 11: 12: case 3: 13: echo '$tal har värdet 3'; 14: break; 15: 16: default: 17: echo '$tal innehåller inte värdet 1, 2 eller 3'; 18: break; 19: } 20: 21: ?>
|
Viktigt att notera är användandet av 'break'. Testa att ta bort den satsen efter det första case-blocket. För att körningen skall fungera som tänkt skall $tal vara satt till heltalet ett innan vi kommer fram till själva switch-satsen.
Som du ser blir resultatet att körningen "trillar igenom" ner till nästa break. Körningen går in i blocket för 'case 1:' men fortsätter sedan även i blocket 'case 2:', trots att $tal är satt till ett.
Anledningen till att det blir på detta viset är att det ibland är så man vill ha det, det finns alltså tillfällen då detta är användbart. Men som sagt, tänk på att inte glömma break, glömmer du den kan det leda till fel som kan vara svåra att felsöka.
Nu var vi klara med villkorssatser, dags att gå igenom begreppet slingor!