Switch- och match-satser
Använd switch och PHP 8:s match för logik med flera grenar.
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 activematch 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; // Turkicmatch 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; // Breturn 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 Foundswitch 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); // positiveNär ska switch respektive match användas
Riktlinjer för valet:
- Använd
matchnär du behöver strikt jämförelse och ett returvärde (PHP 8+) - Använd
switchfö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
UnhandledMatchErrornär default saknas - match-armar accepterar flera kommaseparerade värden
Nästa avsnitt: for- och while-loopar.
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
- if, elseif och else
- Switch- och match-satser
- for- och while-loopar
- foreach och loopkontroll