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;
}
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;
}
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
}
É isso! Espero que tenha gostado! :)
Top comments (0)