några sidor på nätet om PHP programmering

Sök efter  
Börja här Uppgifter Testa dig själv Tips Sidokarta mm. Länkar Sök

Loopar Felhantering

1.3 Kontrollsatser

Se även control-structures *

 

if

Nedan visas ett exempel på if-satsens användning.

<?php
    
# för exemplet skull så generarar jag ett slumptal
    # med hjälp av Mersenne Twister algoritmen.

    # initiera slumptalsgeneratorn
    
mt_srand( time() );
    
    
# slumplal mellan 0 och 20
    
$nummer = mt_rand( 0, 20 );

    
# visa numret
    
echo $nummer;

    if (
$nummer < 10 ) # om mindre är 10
    
{
        echo
" är mindre än 10";
    }
    elseif (
$nummer > 10 ) # om större än 10
    
{
        echo
" är större än 10";
    }
    else
# exakt 10
    
{
        echo
" är exakt 10!";
    }
?>
Listning 1.3.1 - samples/s8.php

9 är mindre än 10
Resultat av listning 1.3.1

Observera att det inte finns någon "End If", utan blocken markeras med hjälp av { och }.

OBS! Det vanligaste misstaget en användare gör är att han skriver = för jämförelser. Detta medför inte ett syntaxfel utan det sker en "vanlig" tilldelning. Se nedanstående exempel. Kan förorsaka otrevliga buggar i programmet.

<?php
    $nummer
= 12345;
    if (
$nummer = 10)
    {
        echo
$nummer . " är exakt 10!";
    }
    else
    {
        echo
$nummer . " är inte 10!";
    }
?>
Listning 1.3.2 - samples/s9.php

10 är exakt 10!
Resultat av listning 1.3.2

? operatorn

En variant på if är C-språkets ?-operand. Den påminner lite om IF funktinonen i EXCEL.

Syntaxen är:
jämförelse ? det som skall returneras om sant : det som returneras om falskt

 

<?php
    
# slumplal mellan 0 och 20
    
mt_srand( time() );
    
$nummer = mt_rand( 0, 20 );

    
# visa om det var större än 10 eller inte
    
echo $nummer;
    echo
$nummer > 10 ? " är större än 10" : " är inte större än 10";

    echo
"<br />";
    
    
# man kan även nästa ? . kombinatinen
    
echo $nummer;
    echo
$nummer > 10 ? " större" : ( $nummer < 10 ? " mindre" : " exakt" );
?>
Listning 1.3.3 - samples/s10.php

9 är inte större än 10
9 mindre
Resultat av listning 1.3.3

 

switch

<?php
    
# dagens nummer (mellan 0 och 6)
    
$dayNumber = date("w");

    switch (
$dayNumber )
    {
        case
0:
            
$dag = "Söndag";
            break;
        case
1:
            
$dag = "Måndag";
            break;
        case
2:
            
$dag = "Tisdag";
            break;
        case
3:
            
$dag = "Onsdag";
            break;
        case
4:
            
$dag = "Torsdag";
            break;
        case
5:
            
$dag = "Fredag";
            break;
        case
6:
            
$dag = "Lördag";
            break;
        default;
            
$dag = "En dag som inte finns?";
    }
    echo
"I dag är det " . $dag;

?>
Listning 1.3.4 - samples/s11.php

I dag är det Måndag
Resultat av listning 1.3.4

Observera ordet break; som gör att switch satsen inte fortsätter med nästa rad. Om man inte har break; kommer man att "trilla igenom" och resultatet blir något konstigt. Se nedan:

<?php
    
# dagens nummer (mellan 0 och 6)
    
$dayNumber = date("w");

    switch (
$dayNumber )
    {
        case
0:
            
$dag = "Söndag";
        case
1:
            
$dag = "Måndag";
        case
2:
            
$dag = "Tisdag";
        case
3:
            
$dag = "Onsdag";
        case
4:
            
$dag = "Torsdag";
        case
5:
            
$dag = "Fredag";
        case
6:
            
$dag = "Lördag";
        default;
            
$dag = "En dag som inte finns?";
    }
    echo
"I dag är det " . $dag;

?>
Listning 1.3.5 - samples/s11wrong.php

I dag är det En dag som inte finns?
Resultat av listning 1.3.5

Eftersom man inte kan använda intervall som i VB kan det kanske vara bäst att strunta i switch och satsa på att behärska if-elseif-else syntaxen istället.

 

   Börja härKontrollsatser