W3docs

case

Entenda a palavra-chave "case" no PHP: sintaxe, fall-through, comparação solta e o padrão switch(true) para intervalos.

Como desenvolvedor PHP, você provavelmente já usou a instrução switch para lidar com múltiplas condições no seu código. A palavra-chave case é um componente fundamental da instrução switch, permitindo definir ações específicas a serem executadas com base no valor de uma variável. Esta página aborda a sintaxe do case, como funcionam o fall-through e o break, o problema da comparação solta, o padrão switch (true) para intervalos e como o case se relaciona com cadeias de if/elseif.

Sintaxe

A palavra-chave "case" é usada para definir uma ação específica a ser executada com base no valor de uma variável em uma instrução "switch". Veja a sintaxe básica para usar a palavra-chave "case" em PHP:

A sintaxe PHP do case

<?php

switch ($variable) {
  case $value1:
    // Code to execute if $variable equals $value1
    break;
  case $value2:
    // Code to execute if $variable equals $value2
    break;
  default:
    // Code to execute if $variable does not equal any of the specified values
}

Neste exemplo, a palavra-chave "case" é usada para definir ações específicas a serem executadas com base no valor da variável "$variable". A instrução break é essencial: ela encerra o bloco switch e evita o "fall-through" para o próximo case. Sem ela, o PHP continuará executando o código nos cases subsequentes até encontrar um break ou o fim do bloco switch. Além disso, observe que o switch do PHP usa comparação solta (==) por padrão, o que significa que case 0 também corresponderá a "0" ou false. Use lógica de comparação estrita se for necessário correspondência exata de tipo.

Exemplos

Vejamos alguns exemplos práticos de como a palavra-chave "case" pode ser usada:

Exemplo de case em PHP

<?php

// Example 1
$day = "Monday";

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

// Output: Today is Monday.

// Example 2
$grade = 85;

switch (true) {
    case $grade >= 90:
        echo "A";
        break;
    case $grade >= 80:
        echo "B";
        break;
    case $grade >= 70:
        echo "C";
        break;
    case $grade >= 60:
        echo "D";
        break;
    default:
        echo "F";
}

// Output: B

O Exemplo 1 corresponde diretamente a um valor string. O Exemplo 2 usa o padrão switch (true): cada case contém uma expressão boolean, e o primeiro que for avaliado como true é executado. Esta é a forma idiomática de lidar com intervalos em um switch, pois um case simples só compara por igualdade.

Agrupando cases (fall-through intencional)

Como um case sem break passa para o próximo, você pode empilhar rótulos para executar o mesmo bloco para vários valores:

<?php

$day = "Sat";

switch ($day) {
    case "Sat":
    case "Sun":
        echo "Weekend";
        break;
    default:
        echo "Weekday";
}

// Output: Weekend

Aqui, "Sat" corresponde ao primeiro rótulo, passa pelo case vazio "Sun" e executa o bloco compartilhado. Esta é a única situação em que omitir o break é intencional, e não um erro.

Benefícios

Usar a palavra-chave "case" traz vários benefícios, incluindo:

  • Código simplificado: A palavra-chave "case" permite criar código mais curto e conciso, mais fácil de ler e entender.
  • Legibilidade melhorada: A instrução "switch" fornece uma estrutura mais limpa do que longas cadeias de instruções "if/elseif" ao comparar uma única variável com múltiplos valores.
  • Maior flexibilidade: A palavra-chave "case" permite definir ações específicas com base no valor de uma variável, tornando o código mais adaptável a diferentes cenários.

Conclusão

A palavra-chave case permite definir ações específicas com base no valor de uma variável dentro de uma instrução switch. Lembre-se de duas armadilhas comuns: adicione break a cada case a não ser que você queira um fall-through intencional, e fique atento à comparação solta ao comparar números com strings.

Tópicos relacionados

Prática

Prática
Em PHP, quais das opções a seguir são tipos de estruturas de controle switch?
Em PHP, quais das opções a seguir são tipos de estruturas de controle switch?
Was this page helpful?