Skip to main content

Conditionals

if / else if / else

The if statement executes code when a condition is true:

ZYMBA
$score = 85;

if ($score >= 90) {
$grade = "A";
} else if ($score >= 80) {
$grade = "B";
} else if ($score >= 70) {
$grade = "C";
} else {
$grade = "F";
}

echo $grade; // "B"

Conditions can use any expression that evaluates to a truthy or falsy value:

ZYMBA
$name = "Alice";

if ($name) {
echo "Name is set";
}

if (count $items > 0) {
echo "Items available";
}

unless

The unless keyword is the inverse of if — it executes when the condition is false:

ZYMBA
$loggedIn = false;

unless ($loggedIn) {
echo "Please log in";
}

This is equivalent to if (!$loggedIn) but reads more naturally for guard clauses:

ZYMBA
function $processOrder($order) {
unless ($order is object) {
throw new @Exception("Invalid order");
}
unless (exists $order.items) {
throw new @Exception("Order has no items");
}
// Process...
}

Ternary operator

For simple conditional expressions:

ZYMBA
$status = ($score >= 60) ? "Pass" : "Fail";
$label = ($count == 1) ? "item" : "items";

echo "$count $label"; // "5 items"

Switch statement

The switch statement matches a value against multiple cases:

ZYMBA
$status = "shipped";

switch ($status) {
case "pending":
echo "Order is pending";
break;
case "shipped":
echo "Order has been shipped";
break;
case "delivered":
echo "Order delivered";
break;
default:
echo "Unknown status";
}

Multiple values per case

A single case can match multiple values:

ZYMBA
$day = "Saturday";

switch ($day) {
case "Monday", "Tuesday", "Wednesday", "Thursday", "Friday":
echo "Weekday";
break;
case "Saturday", "Sunday":
echo "Weekend";
break;
}

Fall-through behavior

Without break, execution falls through to the next case:

ZYMBA
$level = 1;

switch ($level) {
case 1:
echo "one ";
case 2:
echo "two ";
break;
case 3:
echo "three ";
}
// Output: one two (falls through from case 1 to case 2)
warning

Always include break in each case unless you intentionally want fall-through behavior.