PHP Academy · Lektion

Switch- och match-satser

Använd switch och PHP 8:s match för logik med flera grenar.

Lektion 2 av 413 steg

Switch- och match-satser är en gratis lektion i PHP Academy på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för PHP Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i PHP Academy innehåller totalt 4 lektioner.

Switch kontra if-kedjor

När många grenar baseras på värdet hos en enda variabel är switch tydligare än en lång if/elseif-kedja.

PHP 8 introducerade match som ett modernt och strikt alternativ.

Grunderna i switch-satsen

Switch utvärderar sitt uttryck en gång och kör blocket för det matchande fallet:

<?php
$day = 'Monday';

switch ($day) {
    case 'Monday':
        echo 'Start of work week';
        break;
    case 'Friday':
        echo 'Almost weekend';
        break;
    default:
        echo 'Midweek';
}

Beteendet hos fall-through

Utan break fortsätter körningen in i nästa fall – ett avsiktligt knep för gruppering:

<?php
$status = 2;

switch ($status) {
    case 1:
    case 2:
    case 3:
        echo 'In progress';  // runs for 1, 2, or 3
        break;
    case 4:
        echo 'Done';
        break;
}

Switch använder lös jämförelse

Switch använder internt == (lös jämförelse) – det kan leda till överraskande matchningar:

<?php
$val = 0;

switch ($val) {
    case 'foo':   // 0 == 'foo' in PHP 7!
        echo 'match foo';
        break;
    case 0:
        echo 'match zero';  // PHP 8 fixes this
        break;
}
// PHP 8: match zero (fixed)
// PHP 7: match foo (bug!)

PHP 8:s match-uttryck

match liknar switch, men använder strikt jämförelse, returnerar ett värde och kräver ingen break:

<?php
$status = 'active';

$label = match($status) {
    'active'   => 'Currently active',
    'inactive' => 'Not active',
    'pending'  => 'Awaiting activation',
    default    => 'Unknown status',
};

echo $label; // Currently active

match utan matchningsfel

Om ingen arm matchar i match och det saknas en default kastas UnhandledMatchError:

<?php
$code = 99;

try {
    $result = match($code) {
        200 => 'OK',
        404 => 'Not Found',
        500 => 'Server Error',
        // no default!
    };
} catch (\UnhandledMatchError $e) {
    echo 'Unhandled match value: ' . $code;
}

match med flera villkor

En enskild match-arm kan innehålla flera kommaseparerade värden:

<?php
$lang = 'tr';

$region = match($lang) {
    'en', 'en-US', 'en-GB' => 'English',
    'tr', 'az'             => 'Turkic',
    'fr', 'be', 'ca'       => 'French-speaking',
    default                => 'Other',
};

echo $region; // Turkic

match med komplexa uttryck

match-armar kan använda godtyckliga uttryck på höger sida:

<?php
$score = 85;

$grade = match(true) {
    $score >= 90 => 'A',
    $score >= 80 => 'B',  // matches
    $score >= 70 => 'C',
    default      => 'F',
};

echo $grade; // B

return från match

Eftersom match är ett uttryck kan det användas överallt där ett värde förväntas:

<?php
function getHttpMessage(int $code): string {
    return match($code) {
        200 => 'OK',
        201 => 'Created',
        400 => 'Bad Request',
        401 => 'Unauthorized',
        404 => 'Not Found',
        default => 'Unknown',
    };
}

echo getHttpMessage(404); // Not Found

switch i return-kontext

switch kan användas i en funktion för att returnera olika värden, men match är tydligare:

<?php
function describe(int $n): string {
    switch (true) {
        case $n < 0:  return 'negative';
        case $n === 0: return 'zero';
        default:       return 'positive';
    }
}

echo describe(-5);  // negative
echo describe(0);   // zero
echo describe(7);   // positive

När ska switch respektive match användas

Riktlinjer för valet:

  • Använd match när du behöver strikt jämförelse och ett returvärde (PHP 8+)
  • Använd switch för gruppering med fall-through eller när PHP 7 måste stödjas
  • Båda är tydligare än långa if/elseif-kedjor vid förgrening utifrån flera värden

Snabbkontroll

Vad händer i ett match-uttryck när ingen arm matchar och det saknas en default?

Sammanfattning: switch och match

Viktiga skillnader:

  • switch – lös jämförelse, fall-through, PHP 4+
  • match – strikt jämförelse, inget fall-through, returnerar ett värde, PHP 8+
  • match kastar UnhandledMatchError när default saknas
  • match-armar accepterar flera kommaseparerade värden

Nästa avsnitt: for- och while-loopar.

Gratis att börja

Lär dig PHP med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
49
Lektioner
195

Vanliga frågor

Är lektionen ”Switch- och match-satser” gratis?

Ja – hela texten till ”Switch- och match-satser” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i PHP Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i PHP Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Switch- och match-satser”?

Använd switch och PHP 8:s match för logik med flera grenar. Ni övar på PHP Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig PHP Academy?

Du behöver inga förkunskaper. Utbildningen i PHP Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Switch- och match-satser”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här PHP Academy-lektionen?

Ja. Varje PHP Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. if, elseif och else
  2. Switch- och match-satser
  3. for- och while-loopar
  4. foreach och loopkontroll
← Tillbaka till PHP Academy