An elseif chain checks conditions in order until one branch matches.

ordered conditions Only the first matching `if` or `elseif` block runs.

Elseif Chains

level
elseif_chain.php
Replay: real traced execution (multi-file project)
<?php
$level = 2;
$label = "";
$priority = 0;

if ($level >= 4) {
    $label = "critical";
    $priority = 100;
} elseif ($level >= 2) {
    $label = "normal";
    $priority = 50;
} else {
    $label = "low";
    $priority = 10;
}

echo "level=" . $level . "\n";
echo "label=" . $label . "\n";
echo "priority=" . $priority . "\n";
<?php
$level = 1;
$label = "";
$priority = 0;

if ($level >= 4) {
    $label = "critical";
    $priority = 100;
} elseif ($level >= 2) {
    $label = "normal";
    $priority = 50;
} else {
    $label = "low";
    $priority = 10;
}

echo "level=" . $level . "\n";
echo "label=" . $label . "\n";
echo "priority=" . $priority . "\n";
<?php
$level = 4;
$label = "";
$priority = 0;

if ($level >= 4) {
    $label = "critical";
    $priority = 100;
} elseif ($level >= 2) {
    $label = "normal";
    $priority = 50;
} else {
    $label = "low";
    $priority = 10;
}

echo "level=" . $level . "\n";
echo "label=" . $label . "\n";
echo "priority=" . $priority . "\n";
  1. $level ← 2, $label ← (empty), $priority ← 0

    1<?php2$level→ 2 = 2; //@level=1, 43$label→ (empty) = "";4$priority→ 0 = 0;56if ($level >= 4) {7    $label = "critical";8    $priority = 100;9} elseif ($level >= 2) {10    $label→ normal = "normal";11    $priority→ 50 = 50;12} else {13    $label = "low";14    $priority = 10;15}1617echo "level=" . $level2 . "\n";18echo "label=" . $labelnormal . "\n";19echo "priority=" . $priority50 . "\n";
    outputlevel=2
    label=normal
    priority=50
  1. $level ← 1, $label ← (empty), $priority ← 0

    1<?php2$level→ 1 = 1;3$label→ (empty) = "";4$priority→ 0 = 0;56if ($level >= 4) {7    $label = "critical";8    $priority = 100;9} elseif ($level >= 2) {10    $label = "normal";11    $priority = 50;12} else {13    $label→ low = "low";14    $priority→ 10 = 10;15}1617echo "level=" . $level1 . "\n";18echo "label=" . $labellow . "\n";19echo "priority=" . $priority10 . "\n";
    outputlevel=1
    label=low
    priority=10
  1. $level ← 4, $label ← (empty), $priority ← 0

    1<?php2$level→ 4 = 4;3$label→ (empty) = "";4$priority→ 0 = 0;
  2. $label ← critical, $priority ← 100

    6if ($level4 >= 4) {7    $label→ critical = "critical";8    $priority→ 100 = 100;9} elseif ($level >= 2) {
  3. echo "level=" . $level . " ";

    17echo "level=" . $level4 . "\n";18echo "label=" . $labelcritical . "\n";19echo "priority=" . $priority100 . "\n";
    outputlevel=4
    label=critical
    priority=100

Check Levels in Order

  1. $level starts at 2.
  2. The first check, $level >= 4, is false.
  3. The next check, $level >= 2, is true.
  4. The label becomes normal and priority becomes 50. | Level | First matching branch | Label | Priority | | --- | --- | --- | --- | | 1 | else | low | 10 | | 2 | elseif | normal | 50 | | 4 | if | critical | 100 |

Exercise: elseif_chain.php

Use an elseif chain to assign low, normal, or critical labels with priorities