1. php
  2. /basics
  3. /conditional-statements

Introduction to PHP Conditional statements

Definition

A conditional statement in PHP is a way to control the flow of a program based on certain conditions. The "condition" is a boolean expression that evaluates to either true or false. If the condition is true, the code within the curly braces will be executed. If the condition is false, the code will be skipped. Other conditional statements such as else and elseif can also be used to specify different actions to be taken if the initial condition is not met. The basic structure of a conditional statement in PHP is as follows:

Understanding Program Flow Control

Conditional statements are the decision-making backbone of programming. They allow your code to react differently to different situations, making programs dynamic and responsive. Without conditionals, programs would execute the same sequence every time, unable to adapt to user input or changing data.

Key Concepts:

  • Boolean Context: Any expression in a condition is evaluated to true or false
  • Short-Circuit Evaluation: Complex conditions stop evaluating once the result is determined
  • Code Blocks: Groups of statements executed together based on conditions
  • Branching: The ability to choose different execution paths

Types of Conditional Statements

Different Types of conditional statements in PHP are as follows.

  1. If statement
  2. If-else statement
  3. Else-if statement
  4. Switch statement

Each type serves specific purposes and choosing the right one improves code clarity and maintainability.

If Statement

The if statement is used to execute a block of code if a certain condition is true. The syntax for an if statement is as follows:

if (condition) {
    // code to be executed if condition is true
}

If Statement Mechanics:

The if statement is the simplest form of conditional execution:

  • Condition Evaluation: The expression in parentheses is evaluated to boolean
  • Type Coercion: Non-boolean values are converted using PHP's truthy/falsy rules
  • Single Statement: Braces can be omitted for single statements (not recommended)
  • No Alternative: If condition is false, execution continues after the if block

Common Use Cases:

  • Validation checks
  • Feature flags
  • Permission verification
  • Optional operations

If-else Statement

The if-else statement is used to execute a block of code if a certain condition is true and another block of code if the condition is false. The syntax for an if-else statement is as follows:

if (condition) {
    // code to be executed if condition is true
} else {
    // code to be executed if condition is false
}

If-Else Binary Decisions:

The if-else structure ensures exactly one path executes:

  • Mutual Exclusion: Either the if block OR the else block runs, never both
  • Complete Coverage: Every possible condition outcome is handled
  • Default Behavior: The else block acts as a catch-all for when the condition fails
  • Nested Possibilities: If-else statements can be nested for complex logic

Here is an example of using an "if-else" statement in PHP:

<?php
$num = 5;

if ($num > 0) {
    echo "$num is positive.";
} else {
    echo "$num is not positive.";
}

Example Analysis:

In this example, the condition being tested is whether the variable $num is greater than 0. If it is, the code within the first set of curly braces will be executed and the message "5 is positive." will be displayed. If it is not, the code within the second set of curly braces will be executed and the message "5 is not positive." will be displayed.

Important Considerations:

  • The condition $num > 0 excludes zero from positive numbers
  • String interpolation in echo allows variable embedding
  • This handles all possible numeric values with two outcomes
  • Consider edge cases: What about null or non-numeric values?

Elseif Statement

Elseif statement is used to check multiple conditions in a sequence. If the first condition is true, the corresponding block of code will be executed, otherwise, the next condition will be checked, and so on.

if (condition1) {
    // code to be executed if condition1 is true
} elseif (condition2) {
    // code to be executed if condition1 is false and condition2 is true
} else {
    // code to be executed if all conditions are false
}

Elseif Chain Behavior:

The elseif structure creates a decision tree:

  • Sequential Checking: Conditions are evaluated top to bottom
  • First Match Wins: Once a condition is true, remaining conditions are skipped
  • Order Matters: Most specific conditions should come first
  • Unlimited Chain: You can have as many elseif blocks as needed

Practical Example:

$score = 85;

if ($score >= 90) {
    $grade = 'A';
} elseif ($score >= 80) {
    $grade = 'B';
} elseif ($score >= 70) {
    $grade = 'C';
} elseif ($score >= 60) {
    $grade = 'D';
} else {
    $grade = 'F';
}

This demonstrates:

  • Conditions must be ordered from highest to lowest
  • Each condition implicitly includes "and previous conditions were false"
  • The else provides a final catch-all

Switch Statement

The switch statement is used to perform different actions based on different conditions. The syntax for a switch statement is as follows:

switch (expression) {
    case value1:
        // code to be executed if expression = value1
        break;
    case value2:
        // code to be executed if expression = value2
        break;
    default:
        // code to be executed if expression does not match any cases
}

Switch Statement Characteristics:

Switch offers a different approach to multiple conditions:

  • Single Expression: Evaluates one expression against multiple values
  • Loose Comparison: Uses == not === for matching
  • Fall-Through: Without break, execution continues to next case
  • Default Case: Optional catch-all for unmatched values

When to Use Switch:

  • Comparing one variable against many specific values
  • Menu systems or state machines
  • Cleaner than multiple if-elseif for value matching
  • When fall-through behavior is desired

Here is an example of using a "switch" statement in PHP:

<?php
$day = "Tuesday";

switch ($day) {
    case "Monday":
        echo "Today is Monday.";
        break;
    case "Tuesday":
        echo "Today is Tuesday.";
        break;
    case "Wednesday":
        echo "Today is Wednesday.";
        break;
    default:
        echo "Today is not Monday, Tuesday or Wednesday.";
}

Switch Example Explained:

In this example, the expression being evaluated is the variable $day. The switch statement compares the value of $day to the values specified in each case. If a match is found, the code within that case's curly braces will be executed. In this example, since the value of $day is "Tuesday", the message "Today is Tuesday." will be displayed. If the value of $day doesn't match any of the cases, the code within the default case will be executed.

Advanced Switch Features:

// Multiple cases with same action
switch ($userRole) {
    case 'admin':
    case 'moderator':
        $canEdit = true;
        break;
    case 'user':
        $canEdit = false;
        break;
}

// Intentional fall-through
switch ($month) {
    case 'December':
        $holidays[] = 'Christmas';
        // No break - falls through
    case 'November':
        $holidays[] = 'Thanksgiving';
        break;
}

Advanced Conditional Techniques

Ternary Operator

The ternary operator provides inline conditional logic:

$result = $condition ? $valueIfTrue : $valueIfFalse;

// Example
$status = $isActive ? 'Active' : 'Inactive';
$discount = $isVipCustomer ? 0.20 : 0.05;

Ternary Benefits and Limitations:

  • Concise for simple conditions
  • Returns a value (unlike if statements)
  • Can be nested but becomes unreadable
  • PHP 7+ supports null coalescing operator ??

Null Coalescing Operator

PHP 7 introduced the null coalescing operator:

// Check if variable exists and is not null
$username = $_GET['user'] ?? 'guest';

// Chain multiple checks
$config = $userConfig ?? $defaultConfig ?? [];

// PHP 7.4+ null coalescing assignment
$data['key'] ??= 'default value';

Boolean Logic in Conditions

Understanding how PHP evaluates conditions:

// Falsy values in PHP
if (!$value) {
    // Executes for: false, 0, 0.0, "", "0", [], null
}

// Truthy values
if ($value) {
    // Executes for everything else, including "false" string!
}

// Strict checking
if ($value === false) {
    // Only executes for boolean false
}

Best Practices

Here are some best practices for using conditional statements in PHP:

  1. Always use clear and descriptive variable and function names to make the code more readable and understandable.

    Good naming eliminates the need for comments: if ($userIsLoggedIn) is clearer than if ($u). This becomes crucial in complex conditions.

  2. Use meaningful and specific conditions, instead of general and vague ones, to make the code more efficient and accurate.

    Instead of if ($data), use if (!empty($data) && is_array($data)). Explicit conditions prevent unexpected behavior and document intent.

  3. Use nested conditional statements in a logical and structured way to handle more complex conditions.

    Limit nesting to 2-3 levels. Beyond that, consider extracting logic into functions:

    if (userCanAccess($user, $resource)) {
        // Cleaner than nested permission checks
    }
    
  4. Use the elseif statement instead of multiple if statements to improve the readability of the code.

    Multiple if statements check every condition. Elseif stops at first match, improving performance and clarifying mutual exclusivity.

  5. Always use braces with conditional statements, even if the code block contains only one statement.

    Prevents bugs when adding statements later:

    // Dangerous
    if ($condition)
        doSomething();
        doSomethingElse(); // Always executes!
    
    // Safe
    if ($condition) {
        doSomething();
    }
    
  6. Use the ternary operator when the condition is simple and the code block contains only one statement, to make the code more concise.

    Good: $price = $isMember ? $memberPrice : $regularPrice; Bad: Complex logic or nested ternaries that require mental parsing.

  7. Avoid using the switch statement when the condition is based on a variable that could take on many possible values. Instead, use if-else statements or an array of callbacks.

    For many values, consider:

    $actions = [
        'create' => 'handleCreate',
        'update' => 'handleUpdate',
        'delete' => 'handleDelete'
    ];
    
    if (isset($actions[$action])) {
        $actions[$action]();
    }
    
  8. Use the break statement inside the switch statement to exit the switch statement once a match is found.

    Forgetting break causes fall-through bugs. Always include break unless fall-through is intentional, and comment when it is.

  9. Always consider edge cases when writing conditional statements to ensure that the code works as expected under all conditions.

    Consider: null values, empty strings, zero, negative numbers, very large numbers, special characters, and unexpected types.

  10. Test the code thoroughly to ensure that the conditional statements are working as intended, and that no errors occur.

    Write unit tests covering all branches. Use code coverage tools to ensure all conditions are tested. Test boundary values and edge cases.