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! :)

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay