PHP tutorial, lær om if, elseif og else, samt. syntax og logiske operatorer

Lær hvordan man bruker if, elseif og else til å ta logiske avgjørelser i PHP-scriptene dine.

Hva er if, elseif og else

Dette er forskjellige måter å teste ting på. Man tester feks en variabel, verdien av en array eller en konstant opp imot noe. Hvis sammenligningen stemmer, vil man utføre nye kommandoer.

For å teste uttrykk bruker man logiske operatorer. Nedenfor er ei liste over operatorene som brukes i denne PHP-tutorialen.

Hvis x og y er variabler, så ser du hvordan operatorene kan brukes for å sammenligne disse. Ikke bli redd, alt forklares inngående i videoen nedenfor. I tillegg anbefales det at du leser gjennom alle eksemplene som er under videotutorialen for å lære mest mulig.

Oversikt over logiske operatorer
operator uttrykk forklaring
< x < y x er mindre enn y
> x > y x er større enn y
<= x <= y x er mindre eller lik y
>= x >= y x er større eller lik y
== x == y x er lik y
=== x === y x er lik y, og x og y har lik datatype
!= x != y x er ikke lik y
!== x !== y x er ikke lik y, eller x og y har forskjellige datatyper.

Hvordan bruke if, elseif og else i PHP

Du har ikke installert Flash på datamaskinen din. Du trenger minimum flash 8 for å kunne se denne videoen.

Som du skjønner er disse logiske testene svært nyttige for å utføre kommandoer og oppgaver som kun skal gjøres når visse ting stemmer.

Eksempler på bruk av if, elseif og else

Hvis du allerede har lært deg om arrays og konstanter, så vil du se at man også kan bruke konstanter og verdiene av arrays i logiske tester.

<?php
// Definerer en konstant
define('FRUKT', 'eple');

// Definerer en array
$array = array(
 
'frukt' => 'eple',
  );

// Sjekker om frukten i array er lik frukten i konstanten,
// og skriver ut "Kåre liker eple", hvis de to stemmer overens.
if ( $array['frukt'] == FRUKT) {
  echo
'Kåre liker ' . $array['frukt'];
}
?>

Validere mot flere hendelser

Hvis vi ønsker å gjøre én ting i ett tilfelle, men en annen ting i et helt annet, så bruker vi if på det første uttrykket og elseif på det neste.

<?php
$passord
= 'hei9991';
define('PASSORD', 'grubagruba');

// Hvis passordet er likt i variabelen og konstanten
if ( $passord == PASSORD ) {
  echo
'Du har skrevet inn riktig passord.';
}
// Hvis passordet er ulikt i variabelen og konstanten
elseif ( $passord != PASSORD ) {
  echo
'Beklager, passordet du skrev inn er ikke riktig.';
}
?>

Husk at du må bruke elseif rett etter en if eller elseif-test, hvis ikke vil du få error i PHP-scriptet ditt. Videre legger du sikkert merke til at man kan bruke mellomrom i koden, slik at den blir mer leselig.

I dette tilfellet er passordet i variabelen ikke likt passordet i konstanten, og dermed vil scriptet skrive ut den siste meldingen.

Hvis ingenting validerer, bruk else

Hvis ingen av testene validerer, men du likevel vil utføre noe, så kan du bruke en else-statement, slik:

<?php
$x
= 1;
$y = 1;
if(
$x<$y)
{
  print
$x . ' er mindre enn ' . $y;
}
elseif(
$x>$y)
{
  print
$x . ' er større enn ' . $y;
}
else
{
  print
$x . ' og  ' . $y . ' validerte ikke mot noen av testene.';
}
?>

Gruppering og validering av uttrykk

Ofte ønsker man å validere en variabel mot flere kriterier.

  • For å validere sant på to uttrykk, A eller B, bruk || eller OR
  • Skal man validere mot to ting, kan man bruke && eller AND.
  • <?php
    $x
    = 50;

    // Vaidere mot to tester, begge må være sanne for at testen skal utføre oppgaven.
    // Man kan erstatte && med AND, om man ønsker det.
    if( ($x < 100) && ($x > 20) {
      print
    'Variabelen er mindre enn 100 og større enn 20';
    }

    // Validerer mot to tester:
    // Den ene eller den andre må være sann for at testen skal utføre oppgaven.
    // Merk at man kan erstatte || med OR, om man ønsker det.
    if( ($x < 100) || ($x == 1000) {
      print
    'Variabelen er mindre enn 100, eller så er variabelen akkurat 1000';
    }
    ?>

    Videre kan man gruppere AND og OR for flere uttrykk, feks slik:

    <?php
    $x
    = 50;

    // Tester mot tre uttrykk. Enten må variabelen være 100,
    // eller så må den både være mindre enn 20 og større enn 10.
    if( ($x == 100) || (($x < 20) && ($x > 10)) ) {
      echo
    'Variabelen er lik 100, eller så er den mindre enn 20 og større enn 10';
    ?>

    Annen syntax å angi if, elseif og else statements

    Dette er for de spesielt interesserte. Man kan angi if, elseif og else statements på en annen måte.

    Syntax som lønner seg ved mye output

    Si for eksempel du har en blokk med HTML-kode som du ønsker å printe til skjermen, dersom visse kriterier er oppfyllt. Da er det slitsomt å måtte putte alt dette i en variabel, eller å printe det direkte ut til skjermen. Det tar også ressurser på serveren, når man bruker variabler og print eller echo for å skrive ut store mengder data.

    <?php
    $passord
    = 'SKRIV INN PASSORD';
    ?>


    <?php if($passord == 'hemmelig'): ?>
      <h1>Hemmelig hjemmeside!</h1>
      <p>Velkommen inn, du er nå inne i den überhemmelige seksjonen av denne hjemmesiden!</p>
    <?php elseif($passord == 'superhemmelig'): ?>
      <h1>Superhemmelig side</h1>
      <p>Passordet du skrev inn gir deg her tilgang til en absolutt superhemmelig webside!!</p>
    <?php else: ?>
      <h1>Feilmelding</h1>
      <p>Passordet du skrev inn var ikke riktig, prøver du å hacke, eller har du glemt det???</p>
    <?php endif; ?>

    Legg merke til at koden her går inn og ut av PHP-modus (den koden som ikke er omsluttet av <?php og ?>, vil ikke bli tolket av PHP-motoren.

    På dette sparer man webserveren for ressurser. Legg dog merke til at man bruker kolon etter uttrykkene man tester for, og avslutter hele testen med endif.

    Du må gjerne prøve PHP-scriptet, og skifte passordet mellom hemmelig og superhemmelig for å se hvordan det fungerer.

    Kort syntax, best når hovedinnholdet er HTML

    Som oftest ønsker vi å skille HTML fra CSS, og HTML og CSS fra PHP. Jo mer du skiller disse tingene fra hverandre, desto lettere blir det å vedlikeholde kode. Logikk (PHP) bør altså skilles fra filer med markup (HTML) og design (CSS) i høyest mulig grad. Likevel er det noen ganger vi bare må gjøre litt logikk i steder hvor det stort sett er HTML. Da lønner denne syntaxen seg.

    <html>
      <head>
        <title>Min supre hjemmeside!</title>
      </head>
      <body>
        <p>Dette er min supre hjemmeside, og her forteller jeg hvordan man lager webside!</p>
        <p class="<?php print ($x == 1) ? 'warning-text' : 'cool-text'; ?>">Velkommen</p>
      </body>
    </html>

    Ser du hvordan man unnlater å bruke if, men heller bruker print foran uttrykket? Deretter bruker man kolon og spørsmålstegn for å angi class-attributten i HTML-dokumentet til å være enten warning-text eller green-text.

    Her vil vi få <p class="warning-text"> hvis $x er 1, og <p class="cool-text"> i alle andre tilfeller.

    Switch statements

    Hvis man skal utføre mange elseif-tester etter den første if-testen, så lønner det seg å bruke switch for forbedret leselighet. Her er et eksempel på bruk av switch med tilhørende forklaring.

    <?php
    $user_group
    = 'admin';

    switch (
    $user_group) {
      case
    'sysop':
        print
    'Du er systemoperatør og har alle rettigheter.';
        break;
     
      case
    'admin':
        print
    'Du er administrator og har mange rettigheter.';
        break;
     
      case
    'moderator':
        print
    'Du er moderator og har moderatorprivilegier.';
        break;
       
      case
    'user':
        print
    'Du er en registrert bruker.';
        break;
       
      default:
        print
    'Du er ikke logget inn.';
        break;
    }
    ?>

    I dette eksempelet tester man altså én variabel mot forskjellige tilfeller, og printer ut meldinger til skjermen basert på hvilken gruppe brukeren tilhører. Man kunne også testet mot en integer eller boolean.

    Merk spesielt den siste hendelsen, default. Det er hva som skal skje hvis ingen av tilfellene skjer. default er altså det samme som else i en serie av if og elseif-statements. break sier til PHP at et kritere er oppfylt og at videre testing skal opphøre.

    Switch med flere caser

    Du kan også kjøre flere caser, feks slik:

    <?php
    switch ($foo) {
        case
    1:
        case
    2:
        case
    3:
          echo
    'Variabelen er 1, 2 eller 3.';
          break;
       
        case
    5:
          echo
    'Variabelen er 5.';
          break;
       
        default:
          echo
    'Variabelen var ikke lik noen av testene.';
          break;
    }
    ?>