PHP-perusteita - Luento 3

Luentotaltiointi

Ongelmia videon katselussa?

PHP on Perliä muistuttava skriptikieli, joka soveltuu WWW-sovellusten tekemiseen. PHP-skriptit voidaan upottaa suoraan XHTML-dokumenttiin. Koodin tulkitseminen tehdäänsivun pyynnön yhteydessä. Käsittelyn tekee PHP-tulkki, joka voidaan asentaa WWW-palvelimeen kytkeytyvänä moduulina tai erillisenä CGI-ohjelmana.

Tämän luennon lähteenä on käytetty Sami Kollanuksen tekemää PHP-opasta. Kiitokset!

Kielen valinta

PHP:n hyviä puolia:

PHP:n huonoja puolia:

Skriptikielien vertailua:

Esimerkkisivu

XHTML-dokumentti PHP-kielellä tuotettuna:

<?php echo '<?xml version="1.0" encoding="ISO-8859-1"?>'; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fi">
<head>
  <title>Hello!</title>
</head>
<body>
  <h1>Tulostetaan PHP:llä:</h1>
  <p>  
    <?php echo "Hello World!"; ?>
  <p>
</body>
</html>

Esimerkissä tekstikappaleen sisään tulostetaan teksti "Hello World!". Tulostus saadaan aikaan echo-komennolla antamalla sille parametriksi tulostettava merkkijono. Tulostuslause sijoittaa siis lopulta tulostettavan merkkijonon <?php-elementin paikalle XHTML-koodissa. Yhtä hyvin tekstikappaleen aloitus- ja lopetuselementit olisi voitu sijoittaa PHP:n tulostuslauseeseen alla olevan esimerkin mukaisesti.

<?php echo "<p>Hello World!</p>" ?>

Syntaksi

PHP-sivu on oikeastaan XHTML-sivu, joka nimetään tavallisesti .php-päätteiseksi tiedostoksi. PHP-sivulla ohjelmakoodi kirjoitetaan <?php-elementin sisään:

<?php koodia...koodia... ?>

Sivulla voi olla useita <?php-elementejä ja elementtejä voi sijoittaa mihin tahansa kohtaan XHTML-koodin sekaan. On vain muistettava pitää huolta siitä, PHP:llä tulostettaessa saadaan aikaan validia XHTML-koodia.

Tässä muutama yleinen huomio PHP:n syntaksista:

Kirjoitettaessa XHTML-standardin mukaista PHP-sivua on huomattava aina ensimmäisellä rivillä oleva XML-version määrittely. Se alkaa samoilla <?-merkeillä kuin PHP-elementti, minkä vuoksi PHP-tulkki yrittää tulkata sitä PHP-koodina. Siitä puolestaan seuraa virhe ja sivun suoritus keskeytyy. Tämä ongelma ratkaistaan sijoittamalla alla olevan esimerkin mukaisesti XML-version määrittely PHP-elementtiin tulostuslauseeseen.

<?php echo '<?xml version="1.0" encoding="ISO-8859-1"?>'; ?>

Esimerkki ehtorakenteesta

PHP-elementin voi haluttaessa sulkea niin, että ehtolauseen suorituslohko jätetään auki. Myöhemmin on silloin tultava toinen PHP-elementti, jossa suorituslohko suljetaan. Väliin voidaan kirjoittaa XHTML-koodia, joka toteutetaan ehdon toteutuessa. Alla on esimerkki tästä. Hyötynä on siis se, ettei kaikkia XHTML-lauseita tarvitse kirjoittaa PHP:n tulostuslauseilla.

<?php if(ehto) { //Tässä jätetään lohko auki ?>
<p>
  Tämä kappale näkyy, mikäli ehto toteutuu
</p>
<?php } else { //Tässä suljetaan if-lohko ja jätetään else-lohko auki ?>
<p>
  Tämä kappale näkyy, jos ehto on epätosi
</p>
<?php } //Lopuksi suljetaan else-lohko ?>

Tulostus

Edellisissä kappaleissa esitetyissä esimerkeissä tulostukseen on käytetty echo()-rakennetta. Yhtä hyvin tässä olisi voitu käyttää print()-rakennetta. Ne toimivat useimmissa tapauksissa samalla tavoin. Tulostuslause voidaan molemmissa tapauksissa muotoilla usealla eri tavalla, joita on selvitetty alla olevassa esimerkissä, jossa on käytetty print()-rakennetta.

<?php
  print "Tulostetaan jotain";
  print"Tulostetaan jotain";
  print ("Tulostetaan jotain");
  print("Tulostetaan jotain");
?>

Include ja require

PHP-sivulle voi liittää toisen tiedoston include()- tai require()-funktioilla. Funktiot sijoittavat yksinkertaisesti parametrina annetun tiedoston sisällön funktion paikalle. Toiseen tiedostoon voi olla viisasta sijoittaa vaikkapa itse kirjoitettu funktiokokoelma tai joitakin dokumentin osia. Alla on esimerkki PHP-sivun rakenteesta, jossa dokumentin alku ja loppu ovat erillisissä tiedostoissa. Tällä tavalla saadaan jokaiselle dokumentille varmasti samanlainen runko.

<?php
  include("alku.txt");
  ...
  PHP-koodia
  ...
  include("loppu.txt");
?>

include()- ja require()-funktiot toimivat muuten täysin identtisesti, mutta require()-funktio aiheuttaa epäonnistuessaan vakavan virheen. Vakava virhe tarkoittaa sitä, että sivun suoritus lopetetaan virhetilanteeseen. include()-funktiota käytettäessä suoritusta jatketaan joka tapauksessa.

Tietotyypit

PHP:ssä on kahdeksan perustietotyyppiä:

Boolean

Boolean-tyyppinen muuttuja saa luonnollisesti arvokseen joko TRUE tai FALSE. Isoilla ja pienillä kirjaimilla ei ole kirjoitusasussa väliä, vaan esimerkiksi TRUE voidaan kirjoittaa 'true' tai 'True'.

Integer

Integer tarkoittaa kokonaislukua. Integerin maksimipituus riippuu käyttöjärjestelmästä, mutta hyvin yleisesti se on 32-bittinen luku (noin +/- 2.15e+9). Mikäli integer-tyyppiseen muuttujaan yritetään sijoittaa itseisarvoltaan liian suuri luku, muuttuu muuttuja float-tyyppiseksi.

Float

Float on PHP:n reaalilukutyyppi. Myös sen maksimipituus riippuu käyttöjärjestelmästä, mutta yleisesti se on 64-bittinen luku (noin 1.8e308).

String

String on PHP:n merkkijonotyyppi. Yksirivinen merkkijono voidaan määritellä joko lainausmerkeissä tai heittomerkeissä. Lisäksi voidaan alku- ja lopputunnistetta käyttämällä määritellä samalla kertaa useampirivinen merkkijono. Alla on esimerkki, jossa tulostetaan merkkijono jokaisella tavalla ilmaistuna.

<?php 
  $mjono = "jotain";
  echo "Merkkijono lainausmerkeissä $mjono\n";
  echo 'Merkkijono heittomerkeissä $mjono\n';
  $s = <<<TUNNISTE 
  Tässä on useamman rivin mittainen merkkijono
  $mjono esimerkkitekstiä 
  lisää tekstiä.
TUNNISTE;
  echo $s;
?>

Lainausmerkeillä ja heittomerkeillä on se ero, että heittomerkkien sisään kirjoitettua merkkijonoa ei tulkita. Siis esimerkissä heittomerkkien sisään laitettu tulostettava merkkijono tulostuu aivan niin kuin koodissa lukee: Merkkijono heittomerkeissä $mjono\n. Lainausmerkkien sisään määritellyssä merkkijonossa puolestaan tulkitaan muuttujat ja koodatut erikoismerkit (esimerkissä rivinvaihto, \n). Esimerkissä lainausmerkkeihin määritelty merkkijono tulostuu: Merkkijono lainausmerkeissä jotain. Muuttujan nimen paikalle tulostuu muuttujan arvo ja lauseen lopuksi tulostetaan rivinvaihto. Rivinvaihdot selkeyttävät XHTML-lähdekoodia.

Esimerkissä viimeisenä on määritelty useamman rivin merkkijono. Määrittely alkaa <<<-merkeillä, joiden perään tulee tunnistemerkkijono. Useamman rivin merkkijonon määrittely päättyy samaan tunnistemerkkijonoon, joka täytyy olla omalla rivillään ja alkaa rivin ensimmäisestä merkistä. Useamman rivin merkkijono tulkitaan samalla tavalla kuin lainausmerkkeihin kirjoitettu merkkijono.

Array

Array-tietotyyppi tarkoittaa taulukkoa. Niistä kerrotaan erikseen myöhemmin taulukoiden yhteydessä.

Object

Object-tietotyyppi tarkoittaa oliota. Niistä voit katsoa lisätietoa php.net-sivuilta. Olioiden käyttö tullaan käymään läpi myös myöhemmillä luennoilla.

NULL

NULL tarkoittaa sitä, että muuttujalla ei ole määriteltyä arvoa. Sen kirjoitusasussa isoilla ja pienillä kirjaimilla ei ole väliä. Se voidaan siis kirjoittaa vaikkapa 'null' tai 'Null'.

Resource

Resource on erikoinen tietotyyppi, joka sisältää viitteen johonkin ulkopuoliseen tietolähteeseen. Esimerkiksi tiedoston "kahva" tiedostoja käsiteltäessä on resource-tyyppinen muuttuja.

Muuttujat

Muuttujien käytöstä

PHP on ns. heikosti tyypitetty kieli, jossa muuttujalle ei tavallisesti määritellä tietotyyppiä. Muuttujan tietotyyppi määräytyy automaattisesti muuttujan arvon mukaan. Muuttujista on muistettava se, että kaikki muuttujien nimet on aloitettava $-merkillä. Muuttujan nimi ei saa alkaa numerolla. Muuttujien nimissä voi olla myös skandinaavisia merkkejä kuten Javassa. Alla on esimerkki muuttujien käytöstä.

<?php
  $eka = 234; //integer
  $toka = "234"; //string
  $kolmas = 1.3555; //float
  $neljäs = "1.3555"; //string
  $viides = "tekstiä"; //string
  
  echo $eka; //234
  echo $eka+$toka; //468
  echo $eka.$toka; //234234
  echo $neljäs+$toka; //235.3555
  echo $eka.$kolmas; //2341.3555
  echo $eka*$viides; //0
?>

Tulostuslauseiden kommenteissa on esitetty esimerkkikoodin tulostus käytännössä. Esimerkiksi neljännessä tulostuslauseessa on +-operaattorilla laskettu yhteen kaksi merkkijonoa. PHP-tulkki muuntaa automaattisesti +-operaattorin molemmilla puolilla olevat merkkijonot luvuiksi. Mikäli merkkijono ei muodosta lukua, käsitellään sitä nollana. Tämä nähdään viimeisestä tulostusesimerkistä, jossa on kertolasku.

Muuttujien näkyvyys

Lähes kaikki muuttujat ovat PHP:ssä globaalisti näkyvissä. Siis ohjelmalohkot {...} eivät rajoita muuttujien näkyvyyttä kuten Javassa. Myöskään PHP-elementit (<?php ... ?>) eivät rajoita muuttujien näkyvyyttä. Poikkeus globaaliin näkyvyyteen ovat funktiot, joissa niiden ulkopuolella määritellyt muuttujat eivät ole näkyvissä. Alla on esimerkki muuttujien näkyvyydestä.

<?php
  $a = 12;
  $b = " Ei määritelty";
  if($a == 12) {
    $b = " Ehto toteutui";
  }
?>
... XHTML-koodia ...
<?php
  echo $a.$b; //Tulostaa: 12 Ehto toteutui
?>

Esimerkistä nähdään, ettei muuttujan näkyvyys rajoitu ohjelmalohkon sisään kuten Javassa. $b on määritelty if-lohkon sisällä, mutta siitä huolimatta se näkyy vielä lopussa olevassa tulostuslauseessa. Funktioissa ei kuitenkaan näy niiden ulkopuolella määritellyt muuttujat. Alla on esimerkki tästä. Lisää tietoa tulee funktioiden käsittelyn yhteydessä myöhemmillä luennoilla.

<?php
  function muuta($a) {
    $a = "Muutettu";
  }
	
  $a = 12;
  muuta($a);
  echo $a; //Tulostaa: 12
?>

Vakioiden määrittäminen

Vakiot määritellään PHP:ssä define()-funktiolla. Poikkeuksena muuttujien nimiin, vakioiden ei tarvitse alkaa $-merkillä. Vakion arvoksi voi määritellä ainoastaan boolean-arvon, luvun tai merkkijonon. Alla on esimerkki vakion määrittämisestä.

<?php
  define(VAKIO, "Joku merkkijono");
  echo VAKIO; //Tulostaa: Joku merkkijono
?>

Tyypinmuunnokset

Muuttujan tietotyyppiä voidaan muuttaa tilapäisesti ilmoittamalla muuttujan edellä suluissa haluttu tietotyyppi seuraavasti:

<?php
  $a = "12.345";
  $b = (int)$a; // $b:n avoksi tulee 12
?>

Edellä esitetty ilmaisutapa ei muuta muuttujan tietotyyppiä, vaan sitä ainoastaan käsitellään erityyppisenä. Jos muuttujan tyyppiä halutaan aidosti muuttaa, täytyy se tehdä settype()-funktiolla. Funktiolle annetaan kaksi parametria: muuttuja ja uusi tietotyyppi. Alla on esimerkki sen käytöstä.

settype($a, "integer");

Esimääritellyt muuttujat

PHP:ssä on useita ns. esimääriteltyjä muuttujia, jotka PHP alustaa automaattisesti käytettäviksi. Seuraavassa on lueteltu tärkeimpiä näistä. Linkit osoittavat http://www.php.net-sivustolla oleviin määrittelyihin.

Kaikki nämä esimääritellyt muuttujat ovat assosiatiivisia taulukkoja. Tietoihin viitataan halutun tiedon nimen perusteella. Esimerkiksi get-metodilla 'etunimi'-nimisestä lomakekentästä lähetettyyn tietoon viitataan seuraavasti:

$_GET["etunimi"]

Hyödyllisiä funktioita muuttujia käsitellessä

isset()

isset()-funktio tarkistaa, onko jollain muuttujalla arvoa. Se palauttaa tuloksena joko true tai false. Siitä on huomattava, että tyhjä arvokin on arvo. Siis jos isset()-funktiolle annetaan parametriksi esimerkiksi tyhjä merkkijono, se palauttaa arvon true.

if(isset($muuttuja)) {
  echo "Muuttujalla on arvo";
} else {
  echo "Muuttujalla ei ole arvoa";
}

empty()

empty()-funktio tutkii, onko parametrina annetulla muuttujalla tyhjä arvo. Se palauttaa true, jos arvo on tyhjä ja false, jos arvo ei ole tyhjä. Tyhjäksi arvoksi tulkitaan tietotyypistä riippuen false, tyhjä merkkijono, nolla ja NULL.

gettype()

gettype()-funktio palauttaa merkkijonona parametrina annetun muuttujan tietotyypin.

$muuttuja = "jotain vaan";
echo gettype($muuttuja); //tulostaa: string

"is_type"-funktiot

Jos halutaan tarkistaa, onko muuttuja tietyn tyyppinen, on siihen suositeltavaa käyttää is_type-tyyppisiä funktioita. Kaikille tietotyypeille on erikseen tälläinen funktio: is_bool(), is_int(), is_float(), is_string(), is_array(), is_object(), is_null() ja is_resource(). Funktiot palauttavat true, jos muuttuja on kysyttyä tyyppiä ja false, jos muuttuja ei ole kyseistä tyyppiä.

if(is_int($muuttuja)) {
  echo '$muuttuja on integer-tyyppinen';
}

Erilaisiin muuttujien testaustarkoituksiin on myös joitakin muita funktioita. Esimerkiksi is_numeric()-funktio testaa onko muuttuja lukutyyppiä tai onko se numeerinen merkkijono.

var_dump()

var_dump()-funktio tulostaa samalla kertaa muuttujan tietotyypin ja sisällön. Se voi olla joskus hyödyllinen ohjelmaa testatessa.

Operaattorit

Aritmeettiset operaattorit

Aritmeettiset operaattorit toimivat aivan kuten Javassa. Poikkeuksena on muuttujien käyttäytyminen operaattoreiden yhteydessä. Javassa täytyy muistaa muuntaa muuttujat operaattorin vaatimaan tietotyyppiin. PHP taas tekee sen automaattisesti. Esimerkiksi merkkijonomuodossa olevia lukuja voi laskea yhteen välittämättä tietotyypin muunnoksista. PHP:ssä on kuitenkin oltava samalla varovainen tämän ominaisuuden kanssa. Tästä on esimerkki muuttujia käsittelevässä kappaleessa. Alla olevassa taulukossa on lueteltu PHP:n aritmeettiset operaattorit.

EsimerkkiSelitys
$a + $bYhteenlasku
$a - $bVähennyslasku
$a * $bKertolasku
$a / $bJakolasku
$a % $bJakojäännös

Merkkijonojen yhdistäminen

Katenointi eli merkkijonojen yhdistäminen tapahtuu '.'-operaattorilla. Tietotyypin muunnos tapahtuu tarvittaessa automaattisesti. Esimerkiksi lukutyyppiset muuttujat voi yhdistää merkkijonoon yhdistämisoperaattorilla. Alla on esimerkki tästä.

<?php
  $a = 12;
  $b = 34.56;
  echo "jono ".$a.$b; //tulostaa: jono 1234.56
?>

Arvon asettaminen

Myös muuttujan arvon asettamisessa toimii samat operaattorit kuin Javassa. Alla on esimerkkejä näistä:

<?php
  $a = 1;
  $a += 2; //muuttujaan lisätään 2
  $a -= 3; //muuttujasta vähennetään 3
  $b = "Merkki"; //lyhyt muoto toimii myös tässä
  $b .= "jono"; //$b:n arvo: "Merkkijono"
?>

Lisäys-/vähennysoperaattorit

Lisäysoperaattori (++) ja vähennysoperaattori (--) toimivat kuten Javassa. Jos operaattori sijoitetaan muuttujan perään (esim. $a++), suoritetaan operaatio vasta suorituksessa olevan lausekkeen jälkeen. Jos operaattori sijoitetaan muuttujan edelle (esim. --$a), suoritetaan operaatio ennen suorituksessa olevaa lausetta. Alla on esimerkkejä tästä.

<?php
  $a = 1;
  echo $a++; //tulostaa: 1
  echo $a; //tulostaa: 2
  echo --$a; //tulostaa: 1
?>

Loogiset operaattorit

Alla olevassa taulukossa on lueteltu PHP:n loogiset operaattorit.

EsimerkkiSelitys
$a and $btosi, kun sekä $a että $b ovat tosia
$a && $bsama kuin edellä
$a or $btosi, kun vähintään toinen ($a tai $b) on tosi
$a || $bsama kuin edellä
$a xor $btosi, kun toinen ($a tai $b) on tosi, mutta ei molemmat
!$atosi, kun $a on epätosi

Vertailuoperaattorit

PHP:n vertailuoperaattorit on lueteltu alla olevassa taulukossa. Ne ovat paria lisäystä lukuun ottamatta samat kuin Javassa.

EsimerkkiSelitys
$a == $b$a on yhtäsuuri kuin $b
$a === $b$a on yhtäsuuri ja samaa tietotyyppiä kuin $b
$a != $b$a on erisuuri kuin $b
$a <> $bsama kuin edellä
$a !== $b$a on erisuuri kuin $b tai eri tietotyyppiä
$a < $b$a on pienempi kuin $b
$a > $b$a on suurempi kuin $b
$a <= $b$a on pienempi tai yhtäsuuri kuin $b
$a >= $b$a on suurempi tai yhtäsuuri kuin $b

Taulukosta nähdään erona Javaan '===' ja '!==' operaattorit. Tavallisilla yhtäsuuruus-/erisuuruusoperaattoreilla voidaan vertailla toisiinsa esimerkiksi lukua ja merkkijonoa, joka sisältää luvun. Jos halutaan huomioida myös tietotyyppi, täytyy käyttää näitä '==='- ja "!=="-operaattoreita.

Huom! Aivan kuten Javassa, merkkijonoja ei saa vertailla toisiinsa vertailuoperaattoreilla. Merkkijonojen samankaltaisuus on tarkistettava strcmp()-funktiolla seuraavan esimerkin mukaisesti. Funktio palauttaa 0, jos vertailtavat merkkijonot ovat samat. Jos ensimmäisenä parametrina viety merkkijono on pienempi kuin toisena parametrina viety merkkijono, funktio palauttaa negatiivisen arvon (< 0). Jos taas ensimmäisenä parametrinä viety merkkijono on suurempi kuin toisena parametrinä viety merkkijono, fukntio palauttaa positiivisen arvon (> 0).

<?php 
if(!strcmp($jono1, $jono2)) {
  echo '$jono1 ja $jono2 ovat yhtä suuret';
}
?>

Kontrollirakenteet

Kontrollirakenteet voidaan kirjoittaa täysin C-kielestä (ja Javasta) tutulla tavalla. Niiden lisäksi sama asia voidaan usein ilmaista Perlille tyypillisellä tavalla.

If, else, elseif

Ehtolauseet kirjoitetaan aivan C-kielestä (ja Javasta) tutulla tavalla. Seuraavassa on esimerkki, jossa vertaillaan kahta muuttujaa ($eka ja $toka) toisiinsa. Siinä käsitellään erikseen tapaukset $eka > $toka, $eka < $toka ja $eka = $toka.

<?php
  if ($eka > $toka) {
    echo "eka on suurempi kuin toka";
  } elseif ($eka == $toka) {
    echo "eka on yhtäsuuri kuin toka";
  } else {
    echo "eka on pienempi kuin toka";
  }
?>

PHP hyväksyy ehtolauseeseen boolean-tyyppisen arvon lisäksi myös muita tietotyyppejä. Luku nolla, tyhjä merkkijono ja esimerkiksi tyhjä taulukko tulkitaan epätodeksi. Kaikki näistä 'nolla-arvoista' poikkeavat arvot tulkitaan todeksi. Alla on esimerkki tästä. Esimerkin alussa alustetaan merkkijono tyhjäksi. Lopussa voidaan tutkia, onko välissä olevan koodin suorituksen aikana merkkijonoon tullut sisältöä.

<?php
  $s = "";
  ...
  koodia
  ...
  if($s) {
    echo "Merkkijonoon on tullut sisältöä.";
  }
?>

While, do...while, for

Nämä silmukkarakenteet voidaan kirjoittaa täsmälleen samalla tavalla kuin C-kielessä (ja Javassa). Alla on tästä yksinkertainen esimerkki, jossa suoritetaan tulostuslause kymmenen kertaa kolmella tavalla.

<?php
  $a = 10;
  $i = 0;
  while($i<$a) {
    echo "while-kierros numero ".($i+1); 
    $i++; 
  }
  $i=0;
  do {
    echo "do...while-kierros numero ".($i+1);
    $i++;
  } while($i<$a);
  for($i=0; $i<$a; $i++) {
    echo "for-kierros numero ".($i+1);
  }
?>

Break, continue

break ja continue toimivat myös C-kielestä tutulla tavalla. break-komennolla katkaistaan silmukan suoritus kokonaan ja continue-komennolla hypätään silmukan suorituksessa seuraavalle kierrokselle. PHP:ssa on kuitenkin lisäksi ominaisuus, jonka avulla voidaan hypätä sisäkkäisistä silmukoista määrätty määrä portaita ulospäin. Seuraava esimerkki valaisee tätä tilannetta.

<?php
  $a=10;
  for($i=0; $i<$a; $i++) {
    for($j=0; $j<$a; $j++) {
      if($i==1) break 2;
      echo "kierros $i.$j\n";
    }
  }
?>

Esimerkissä on kaksi sisäkkäistä for-silmukkaa, joiden avulla tulostetaan kymmenyksen välein luvut 0.0-9.9. Sisempään silmukkaan on määritelty ehto, jossa toteutetaan break-lause, mikäli ulompi silmukka on toisella kierroksella. Jos tässä kohdassa olisi tavallinen break-lause, jäisi ainoastaan ulomman silmukan toinen kierros suorittamatta. Siis lukusarjasta jäisi välistä luvut 1.0-1.9. Tässä esimerkissä ilmaisu 'break 2;' tarkoittaa sitä, että keskeytetään samalla kokonaan myös ulomman silmukan suoritus. Siis lukusarjan tulostus päättyykin lukuun 0.9.

break- ja continue-lauseiden yhteydessä voidaan kokonaisluvulla ilmaista se, kuinka monta porrasta hypätään silmukoista ulospäin. Luku 1 tarkoittaa sisintä suoritettavaa silmukkaa, jota ollaan suorittamassa. Se luku voidaan jättää ilmoittamatta, sillä sehän tarkoittaa samaa asiaa kuin break- tai continue-lause ilman erillistä määrettä. Esimerkissä break-lause on muodossa 'break 2'. Se tarkoittaa siis, että hypätään suoritettavan silmukan lisäksi ulos myös sitä ulommasta silmukasta.

Switch

switch-lause on myöskin samanlainen kuin C-kielessä (ja Javassa). Parametriksi hyväksytään sekä merkkijono että kokonaisluku. Määritellyt tapaukset suoritetaan järjestyksessä alusta loppuun, ellei suoritusta katkaista break-lauseella, kuten yleensä on tapana. Alla on esimerkki switch-lauseen toteutuksesta.

<?php
  switch($i) {
    case 0:
    case 1:
      echo "$i on 0 tai 1\n";
    case 4:
      echo "$i on 0, 1 tai 4\n";
      break;
    case 5:
      echo "$i on 5\n";
      break;
    default:
      echo "$i on 2, 3 tai suurempi kuin 5\n";
  }
?>

Esimerkin mukaisesti case-tapaus voidaan haluttaessa jättää tyhjäksi. Tapaukset suoritetaan joka tapauksessa järjestyksessä seuraavaan break-lauseeseen asti. Siis $i-muuttujan ollessa arvossa 0 tai 1, suoritetaan sekä 'case 1' ja 'case 4' -kohtiin määritelty toteutus. Suoritus loppuu 'case 4'-kohdassa määriteltyyn break-lauseeseen. Jos $i-muuttujan arvo on 4 tai 5, suoritetaan vain siihen kohtaan (case 4 tai case 5) kirjoitettu koodi. Kaikissa muissa tapauksissa toteutetaan 'default'-kohta.

Alla olevassa esimerkissä parametrina on käytetty merkkijonoa. Toimintalogiikka on edellisen esimerkin kaltainen. Esimerkki voisi olla vaikkapa erään sivuston pääsivun (index.php) toiminnallisuuden toteuttaminen switchin avulla. $toiminto-muuttujan arvo voitaisiin ottaa esimerkiksi $_GET["toiminto"]-muuttujasta.

<?php
  switch($toiminto) {
    case "hallinta":
      //ohjataan käyttäjä sivuston hallintaan
      break;
    case "sisalto":
      //ohjataan käyttäjä selailemaan sivuston sisältöä
      break;
    case "uloskirjaus":
      //kirjataan käyttäjä ulos järjestelmästä
      break;
    default:
      //ohjataan käyttäjä pääsivulle/sisäänkirjautumissivulle
  }
?>

Lisätietoa

Oppaita PHP-kieleen:

Erot muihin skriptikieliin:

Käyttäjien kommentit

Kommentoi tätä sivua Lisää uusi kommentti
Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
http://appro.mit.jyu.fi/sovellukset/luennot/luento3/
© Jukka Mäntylä (jmantyla@mit.jyu.fi) <http://www.iki.fi/jmantyla/>
Tommi Lahtonen (tommi.j.lahtonen@jyu.fi) <http://hazor.iki.fi/>
Antti Ekonoja (anjoekon@jyu.fi) <http://users.jyu.fi/~anjoekon/>
2007-04-17 16:14:21