DEV Community

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

Posted on

2 2

[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)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more