Estruturas de controle remetem a decisões de um trecho de código que deverá ser executado baseado em um teste lógico. Para verificar se a resposta é VERDADEIRA ou FALSA, você precisará usar alguma das estruturas de controle de decisão.
Vamos exemplificar com pseudocódigo:
- Vá até o seu portão.
- Tente trancar o portão.
- Se você tiver a CHAVE, faça:
- Tranque Portão.
- Se NÃO:
- Busque a chave;
- Volte ao portão;
- Tranque o portão.
- Ligue o interruptor.
- Se a LÂMPADA NÃO acender, faça:
- Procure uma lâmpada nova;
- Remova a lâmpada queimada;
- Insira a nova lâmpada.
Foram dados exemplos de como funcionariam estruturas de condições, agora vamos analisar cada uma delas.
A estrutura condicional if
recebe um valor e resolve, colocando a resposta como um valor BOOLEANO. Ou seja: você poderá retornar apenas um valor VERDADEIRO, representado por if (condição) ou FALSO, representado por else (como os exemplos de SE dados acima).
Estrutura de código para a condição IF/ELSE:
if (condition) {
// condição verdadeira
// faça algo
} else {
// condição falsa
}
Link para documentação - IF Link para documentação - ELSE
A estrutura acima representa exatamente como será feito em código, abaixo alguns exemplos:
$idade = 17;
if ($idade >= 18) {
echo "Você é maior de idade";
} else {
echo "Você é menor de idade";
}
// Result: "Você é menor de idade"
$grupo = "ZezinhoDevs";
if ($grupo == "He4rtDevs") {
echo "Sim, esse é o melhor grupo de devs do brasil";
} else {
echo "Isso nem existe velho tá maluco";
}
// Result: "Isso nem existe velho tá maluco"
$estouLogado = true;
if ($estouLogado) {
echo "Continue acessando sua aplicação";
} else {
echo "Redirecionando para o login";
}
// Result: "Continue acessando sua aplicação"
$usuario = "danielhe4rt";
$senha = "secret123";
if ($usuario == "danielhe4rt" && $senha == "secret123") {
echo "Olá danielhe4rt, seja bem vindo";
} else {
echo "Credenciais incorretas";
}
// Result: "Olá danielhe4rt, seja bem vindo"
Quando vemos algum tipo de condição de if/else, o IDEAL é que sejam duas possibilidades de escolha. Porém, toda linguagem de programação existe a condicional extra chamada else if, na qual adiciona mais uma possibilidade de retorno VERDADEIRA para a condição.
Na prática, você pode ter N checagens para interpretar uma resposta retornando VERDADEIRO, até chegar na condição FALSO. Entenda o exemplo abaixo:
if (first condition) {
// condição verdadeira
} else if(second condition) {
// condição verdadeira
} else if(third condition) {
// condição verdadeira
} else {
// condição falsa
}
Você pode adicionar quantos Else if's você quiser no código, mas lembre-se de terminar usando else para ter uma interpretação de condição FALSA.
Abaixo alguns exemplos:
$userDaniel = "danielhe4rt";
$passDaniel = "secret123";
$userCaio = "caioarruda";
$passCaio = "caiozin123";
if ($userDaniel == "danielhe4rt" && $passDaniel == "secret123") {
echo "Olá danielhe4rt, seja bem vindo";
} else if ($userCaio == "caiozin" && $passCaio == "321321") {
echo "Olá caiozin, seja bem vindo";
} else {
echo "Credenciais incorretas";
}
Você também pode utilizar, elseif (a palavra junta). A lógica é a mesma.
$userDanoel = "danoelCoracion";
$passDanoel = "Pssword";
$userArthur = "arthurabreu00";
$passArthur = "tutututututsussuussusw";
if ($userDanoel == "danoelCoracion" && $passDanoel == "Pssword") {
echo "Olá danoelCoracion, seja bem vindo";
} elseif ($userArthur == "arthurdeabreu" && $passArthur == "321321") {
echo "Olá Arthur, seja bem vindo";
} else {
echo "Credenciais incorretas";
}
O construtor switch parece bastante com a lógica do if/else if, porém há uma estrutura melhor para comportar o que você deseja colocar como valores predefinidos.
A declaração tem como base uma condição e N casos de uso dependendo do valor inserido na condição, e é finalizado após a palavra reservada break ser acionada, que pode ser interpretado como o fim de um bloco de código...
Caso não haja nenhuma opção elegível dentro dos casos citados, você pode usar a opção default para retornar um valor padrão.
Um bom exemplo de quando usar o switch case é quando você está em um jogo/chat e há comandos onde um bot te responde baseado no que você inseriu no chat.
Estrutura do switch-case:
switch (cond) {
case val1:
// faça algo
break;
case val2:
// faça algo
break;
case val3:
// faça algo
break;
defaut:
// faça algo quando nenhuma das opções for selecionada
break;
}
Lista de comandos
$comando = "!he4rt";
switch($comando){
case "!site":
echo "Link: https://heartdevs.com";
echo "Esse é o site oficial";
break;
case "!he4rt":
echo "Entre no nosso discord: https://discord.com/he4rt";
echo "Esse é o discord oficial";
break;
case "!comandos":
echo "Segue a lista de comandos";
echo "!he4rt !site";
break;
default:
echo "nada acontece feijoada";
break;
}
// return Entre no nosso discord: https://discord.com/he4rt Esse é o discord oficial
Comando não existente
$comando = "!teste";
switch($comando){
case "!site":
echo "Link: https://heartdevs.com";
echo "Esse é o site oficial";
break;
case "!he4rt":
echo "Entre no nosso discord: https://discord.com/he4rt";
echo "Esse é o discord oficial";
break;
case "!comandos":
echo "Segue a lista de comandos";
echo "!he4rt !site";
break;
default:
echo "nada acontece feijoada";
break;
}
// return Nada acontece feijoada
O Match é uma novidade do PHP 8, com ela ganhamos uma nova opção para fazer comparações multiplas, além dos classico if e else e do switch, visto anteriomente.
O match apróxima-se bastante do switch, em sua lógica. Onde ele pecorre as opções e retorna a primeira que é compativel com suas condicionais. As diferenças entre eles é sua sintaxe mais elegante e suas operações sempre, são acompanhadas pela comparação com os tipos (===).
Outra vantagem do match, é a relização de operações, entre cenário positivos (Exemplo 02), onde podemos fazer novas comparações, para encontrar um resultado esperado.
$comando = "!he4rt";
echo match($comando) {
"!site" => "Link: https://heartdevs.com",
"!he4rt", "!discord" => "Entre no nosso discord: https://discord.com/he4rt",
default => "nada acontece feijoada"
}; // "Entre no nosso discord: https://discord.com/he4rt"
Caso, não seja uma opção assertiva, sempre caíra no 'default':
echo match("heart devs") {
"!site" => "Link: https://heartdevs.com",
"!he4rt", "!discord" => "Entre no nosso discord: https://discord.com/he4rt",
default => "nada acontece feijoada"
}; // "nada acontece feijoada"
Neste exemplo, vamos classificar a idade do usuario. Em vez de escrevermos um switch ou if/else gigansteco, podemos reduzir esta logica a apenas 6 linhas.
$idade = 21;
$result = match (true) {
$idade >= 65 => 'Idoso',
$idade >= 25 => 'Adulto',
$idade >= 18 => 'Jovem adulto',
default => 'Criança',
};
echo $result; // "Jovem Adulto"
O operador ternário ajuda na escrita de condições if/else diminuindo para uma única linha. Ou seja, será algo para ser usado quando você tem uma fácil comparação e um retorno SIMPLES.
O operador ternário leva alguns símbolos para substituir o uso de parênteses e chaves, sendo eles o ? e :
O Sinal de ? sinaliza para o interpretador que tudo que for escrito anteriormente, será a condição a ser executada.
Após o sinal de ? e entre o sinal de : é o que irá retornar se a condição for verdadeira e após o sinal de : é o que irá retornar caso a condição for falsa.
Abaixo alguns exemplos:
Modelos de ternário
condition ? case true : case false;
$nickname = 'danielhe4rt';
$who = $nickname == "jorge123" ? "é o jorge online" : "não é o jorge online";
echo $who; // não é o jorge online
$modoTeste = true;
return $modoTeste ? "MODO DESENVOLVIMENTO ATIVADO" : "MODO DESENVOLVIMENTO DESATIVADO";
// return MODO DESENVOLVIMENTO ATIVADO
O operador de coalescência nula (??) fornece uma forma conveniente de retornar o valor antes do sinal de ?? caso o valor exista e não seja NULL ou retorna o valor após o sinal de ??.
É especialmente útil quando queremos retornar um valor padrão caso uma chave não exista em um array associativo, pois é um ótimo substituto para o operador ternário ou uma estrutura de if/else nesses casos.
$descricaoPorCodigo = array(
1 => 'Este usuário já existe.',
2 => 'Senha incorreta.',
3 => 'Este usuário está bloqueado.',
);
// Exemplo utilizando operador ternário - Retorna 'Alguma coisa deu errado', pois a chave 5 não existe
return isset($descricaoPorCodigo[5]) ? $descricaoPorCodigo[5] : 'Alguma coisa deu errado.';
// A lógica acima pode ser simplicada utilizando o operador de coalescência nula
return $descricaoPorCodigo[5] ?? 'Alguma coisa deu errado.';
isset
verifica a existência de uma variável ou uma chave e retorna um valor boleano. Se a variável/chave existir e não possuir o valor igual aNULL
o resultado retornado seráTRUE
, caso forNULL
ou não existir, o resultado retornaráFALSE
.
Ir para: 3.14 Estruturas de Controle: Loops