VALINTOJEN TEKEMINEN OHJELMASSA

Erilaisten valintojen toteuttamiseen PHP:ssä erilaisia if-lauseita ja switch..case-lause.

Valintoja suoritetaan ennalta asetettujen ehtojen mukaan, esimerkiksi:

Matti vie Maijan elokuviin,
jos hänellä on rahaa 32 euroa.

Matti tarjoaa lisäksi kahvit kahvilassa,
jos hänellä on enemmän kuin 50 euroa.

Muutoin Matti ja Maija katsovat vuokravideoita kotona.


Ehtorakenteissa tarvitaan usein vertailu- ja loogisia-operaattoreita jotka löytyvät täältä.


if - LAUSE

if-lause muodostuu seuraavasti:
 

if (ehto) { lause; }

if-lauseessa tutkitaan ehto ja mikäli ehto on tosi (1), suoritetaan lause. Mikäli ehto on epätosi (0), ohjelma siirtyy seuraavaan suoritettavaan lauseeseen.

Esimerkissä lasketaan if-lauseen ehdossa yhteen luku1 ja luku2. Summan perusteella tulostuu jokin kolmesta tekstistä.

/* if-lauseen käyttö */ <!DOCTYPE HTML> <html lang="en"> <html> <head> <meta charset="UTF-8"> </head> <body> <?php $luku1 = 12; $luku2 = 15; if ($luku1+$luku2 < "20") echo "Luku on alle 20"; if ($luku1+$luku2 == "27") echo "Luku on tasan 27"; if ($luku1+$luku2 > "30") echo "Luku on yli 30"; ?> </body> </html>


Luku on tasan 27



Tehtävä 1 Tee PHP-koodaus if-lauseilla joka antaa kokonaispisteitä vastaavan arvosanan seuraavasti: Kok.pisteet - Arvosana 0 - 119 => 0 120 - 212 => 1 213 - 305 => 2 306 - 400 => 3 Huom ! Esim. 119.1 pisteellä arvosana on 1, 212.1 pisteellä arvosana on 2 jne.



OHJELMALOHKON KÄYTTÖ if - LAUSEEN YHTEYDESSÄ

if-lauseen ehdon toteutuessa voidaan suorittaa yksi lause tai useita lauseita eli ohjelmalohko. Mikäli if-lauseen ehdon toteutumisen seurauksena on suoritettavana useita lauseita, nämä kootaan aaltosulkujen sisään. Ohjelmalohko muodostuu seuraavasti:

if (ehto) { lause_1; lause_2; .... lause_n; }

Mikäli ehto on tosi, suoritetaan aaltosulkujen sisällä olevat lauseet, eli lisäämällä aaltosulkeet saadaan if-lauseelle useampia toimintoja aikaan.


Tehtävä 2 Tee PHP-koodaus. LUKU_1 muuttujassa on numero 12. LUKU_2 muuttujassa on numero 14. LUKU_3 muuttujassa on numero 16. Jos LUKU_2 on yhtäsuuri tai suurempi kuin kuin 14, näytä LUKU_1 + LUKU_2 ja laskun tulos näytä LUKU_2 + LUKU_3 ja laskun tulos näytä LUKU_1 + LUKU_3 ja laskun tulos




SISÄKKÄISET if - LAUSEET

Sisäkkäisten if-lauseiden yleinen muoto on:

if (ehto) if(ehto2) lause;

Toinen if-lause on ensimmäisen if-lauseen rungon osa. Lause suoritetaan vain kun molemmat ehdot ovat tosia.

/* sisäkkäiset if-lauseet */ <?php $luku = 141; echo "Tutkittava luku on 141. <br>"; if($luku >= 1 & $luku < 500){ echo " Luku on 1 ja 500 välillä, <br>"; if($luku > 1 & $luku < 250){ echo " sekä luku on 1 ja 250 välissä.<br>"; } if($luku > 251 & $luku <= 500){ echo " sekä luku on 251 ja 500 välissä."; } } ?>


Esimerkin tuottama tulos www-sivulle:

Tutkittava luku on 141.
Luku on 1 ja 500 välillä,
sekä luku on 1 ja 250 välissä.



if ... else LAUSE

if-lauseessa testataan ehto, mikäli ehto pitää paikkansa, suoritetaan if-lauseelle kirjoitetut tehtävät. Mikäli ehto ei toteudu, toimintoja ei suoriteta. Kuitenkin usein on tilanne että pitäisi jotain toimintoja tehdä vaikka if-lause ei toteutunut. Ratkaisu on if...else-lause, joka sallii suoritettavaksi tehtäviä mikäli if-ehto ei toteudu.

Yleinen muoto if...else lauseelle:

if (ehto) else lause;

Esimerkissä käytetään date()-funktioita kellonajan saamiseksi aika-muuttujaan. aika-muuttujassa olevaa tietoa tutkitaan if- lauseen ehdossa. Mikäli kello on 9 - 18, toivotetaan Hyvää päivää ! ja näytetään kellonaika, muuten näytetään Hyvää iltaa ! teksti.

/* if-lauseen käyttö */ <?php $aika = date("H:i"); if ($aika >= "9" || $aika < "18") { echo "Hyvää päivää ! <br>Kello on "; echo $aika; } else { echo "Hyvää iltaa !"; } ?>


Hyvää päivää !
Kello on 00:38


Sisäkkäisten if else rakenne on seuraava:

if (ehto 1) { if (ehto 2) lause A; else lause B; } else lause C;

Esimerkissä käytetään sisäkkäistä rakennetta lämpötilan ilmaisussa:

/* Sisäkkäiset if else-lauseet */ <?php $lampo = 13.1; if ($lampo < 25) { if ($lampo > 15) echo "Sopivan lämmintä."; else echo "Liian kylmää !"; } else echo "Nyt tuli hiki..."; ?>

Liian kylmää !



if elseif else LAUSE

if elseif else-lauserakennetta voidaan käyttää vaihtoehtona rakenteelle if - if - else.

Yleinen muoto if...elseif...else lauseelle:

if (ehto 1) lause; elseif (ehto 2) lause; else lause;

Esimerkissä on osa jäähdyttimen ohjauskoodia. Kun anturin lämpötila on enemmän kuin 23 astetta, saadaan ilmoitus "Käynnistä jäähdytys". Jäähdyttäminen pysäytetään kun anturin lämpötila on alle 20 astetta. Kun lämpötila on 20 -23 astetta, annetaan siitä ilmoitus "Sisälämpö välillä 20 -23".

/* if elseif else lause */ <?php $lampo = 19.9; echo "Anturin lämpötila " . $lampo . "<br>"; if ($lampo > 23) { echo " Käynnistä jäähdytys. "; } elseif ($lampo < 20) { echo "Pysäytä jäähdytys"; } else { echo "Sisälämpö välillä 20 - 23."; } ?>

Anturin lämpötila 19.9
Pysäytä jäähdytys

Tehtävä 2 Kirjoita tähän myöhemmin tehtävä.

else-osa kuuluu aina lähimpään if-osaan. Sulkuja käyttämällä voidaan järjestystä muuttaa. Sisäkkäisten if...else lauseiden käytössä on oltava huolellinen, koska else saattaa viitata helposti väärään if-osaan.


switch ... case LAUSE

PHP:ssa on mahdollisuus suorittaa useasta valinnasta yksi lause tai lausekokonaisuus käyttämällä switch...case-rakennetta.

switch...case yleinenmuoto:

switch(valinta) { case valinta_1: lause_1; break; case valinta_2: lause_2; break; ........... case valinta_n: lause_n; break; default: oletuslause; }

switch...case-komentoa käytettäessä testataan muuttuja. Mikäli case tapauksista löytyy vastaava suoritetaan lause. Muussa tapauksessa suoritetaan default-osa. default-osa voi myös puuttua.

<?php $Vari = "Mustikka"; switch ($Vari) { case "Mansikka": echo "Mansikan väri on punainen!"; break; case "Mustikka": echo "Mustikan väri on sininen!"; break; case "Lakka": echo "Lakan väri on oranssi!"; break; default: echo "Sinun marjasi ei ole Mansikka, Mustikka tai edes Lakka!"; } ?>

Mustikan väri on sininen!

Tehtävä 3 Kirjoita tähän myöhemmin tehtävä.




switch-komennon yhteydessä on käytettävä break-komentoa. break-komento siirtää ohjelman suorituksen switch-rakennetta seuraavaan ohjelmalauseeseen.