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)