DEV Community

Cover image for [PHP curtas] Operadores lógicos: Quem vem primeiro?
Tadeu Barbosa
Tadeu Barbosa

Posted on

[PHP curtas] Operadores lógicos: Quem vem primeiro?

No PHP temos alguns operadores lógicos: or ou ||, and ou &&, xor or ^. Mas, e aí?! Quem tem prioridade?

Suponhamos que estejamos escrevendo um código ultra secreto onde somente uma pessoa terá acesso. Criamos um formulário HTML e enviamos os valores para esse nosso código abaixo. Imagine que as variáveis na parte de cima venha pela variável global: $_POST ($nome = $_POST['nome']).

$nome = "Luna";
$sobrenome = "Lovegood";
$casa = "Corvinal";

function checkTemAcesso(tring $nome, string $sobrenome, string $case): bool {
  // poderíamos colocar toda essa linha como retorno,
  // só para ficar mais claro fiz assim :)
  if ($nome === "Luna" && $sobrenome === "Lovegood" or $casa === "Corvinal") {
    return true;
  }
  return false;
}
Enter fullscreen mode Exit fullscreen mode

E então?! Qual será o retorno da função: true ou false? True, obviamente! O nome e sobrenome conferem. Mas se eu te disser que ele não entrou pela primeira, mas sim pela segunda condição? Logo, caso alteremos os valores, o código continuará funcionando:

$nome = "Padma";
$sobrenome = "Patil";
$casa = "Corvinal";

function checkTemAcesso(string $nome, string $sobrenome, string $case): bool {
  if ($nome === "Luna" && $sobrenome === "Lovegood" or $casa === "Corvinal") {
    return true;
  }
  return false;
}
Enter fullscreen mode Exit fullscreen mode

Daí vem a pergunta: Quem vem primeiro? Ou: quem tem prioridade?

Nesse caso dos operadores lógicos, os operadores: or, and e xor, tem preferência! Caso em uma condição haja algum desses, eles serão priorizados em relação aos outros: ||, && e ^.

Importante: O compilador vai priorizar quem estiver mais a direita (veja o exemplo no código abaixo)!

Alguns exemplos:

$nome = "Padma";
$sobrenome = "Patil";
$casa = "Corvinal";

if ($nome === "Luna" && $sobrenome === "Lovegood" or $casa === "Corvinal") {
  // retorna true, pois priorizou o or
}

if ($nome === "Luna" and $sobrenome === "Lovegood" or $casa === "Corvinal") {
  // retorna true, pois o or, por estar mais a direira, foi priorizado
}

if ($nome === "Luna" and $sobrenome === "Lovegood" || $casa === "Corvinal") {
  // retorna false, pois o and foi priorizado
}

if ($nome === "Luna" && $sobrenome === "Lovegood" || $casa === "Corvinal") {
  // retorna true, pois retornou true na segunda condição
}

if (($nome === "Luna" and $sobrenome === "Lovegood") || $casa === "Corvinal") {
  // retorna true, pois isolou a primeira condição entre parenteses,
  // executou primeiro, depois a segunda
}
Enter fullscreen mode Exit fullscreen mode

É isso! Espero que tenha gostado! :)

Top comments (0)