Também conhecidos como operadores booleanos, os operadores lógicos são mecanismos que permitem agrupar diversas expressões, de modo a produzir um único resultado: TRUE ou FALSE, facilitando muuuito a vida do desenvolver web PHP.
Operador Lógico AND : &&
Suponha que tenhamos duas expressões/variáveis: val1 e val2.
Se fizermos: val1 && val2 ou val1 AND val2
O resultado vai ser:
TRUE: se val1 E val2 forem TRUE, as duas.
FALSE: se val1 ou val2, ou as duas, forem FALSE.
(2>1) && (1==1) : TRUE, as duas expressões são verdadeiras
(2>2) AND (1==1): FALSE, pois a primeira expressão é falsa
Operador Lógico OR: ||
Se AND em inglês significa E (expressão1 E expressão2), OR significa OU.
Assim, se uma expressão for verdadeira OU a outra, toda a expressão será verdadeira:
Para: $a || $b
Será TRUE se $a for verdade OU $b for verdade OU todas forem verdade.
Será FALSE apenas se TODAS forem FALSAS.
Podemos substituir por $a OR $b.
Exemplos:
(2>1) || (2==2): TRUE, ambas são verdade
(1>2) OR (2==2): TRUE, a segunda é verdade
(1>2) OR (2==1): FALSE, pois todas são falsas
Operador Lógico XOR: OR exclusivo
Um pouco semelhante ao operador OR (||), é o XOR.
Ele é chamado de OR Exclusivo.
Dissemos que no OR, a expressão resultante é verdadeira se QUALQUER uma das expressões forem verdadeiras, bastante uma ser (dentre 1 milhão, por exemplo).
O XOR resulta TRUE se, e somente se, UMA delas for verdadeira.
Se tiver duas ou mais, ou nenhuma expressão, verdadeira, ele vai resultar FALSE.
(2>1) XOR (1==2): TRUE, pois só a primeira é verdadeira
(2>1) XOR (1==1): FALSE< pois ambas são verdadeiras
Operador Lógico NOT: !
Este operador muda o que é TRUE para FALSE, e FALSE para TRUE
!FALSE : TRUE
!1 : FALSE, pois 1 era TRUE
!'' : TRUE, pois string vazia é FALSE
A única diferença entre o && e o AND, bem comoo entre o || e o OR e entre !e o NOT, é a precedência.
$$, || e ! tem precedência maior sobre AND, OR e NOT, por isso usaremos eles nos exemplos de nossa apostila.
Exercício usando Operadores Lógicos
Vamos refazer um exercício:
Crie um sistema Web que pergunte a idade do usuário. Se ele tiver menos de 16 anos, não pode votar.
Se tiver entre 16 e 18 é facultativo. Se tiver entre 18 e 65 é obrigatório votar.
Se tiver mais de 65, também é facultativo.
Se tiver mais de 65, também é facultativo.
Solução:
<html> <head> <title>Apostila PHP Progressivo</title> </head> <body> <form action="" method="get"> Sua idade: <input type="number" name="age" /><br /> <input type="submit" name="submit" value="Testar" /> </form> <?php $idade = $_GET['age']; if( $idade<16) echo "Não pode votar"); elseif ($idade<18 || $idade>65) echo "Seu voto é facultativo"; else echo "Seu voto é obrigatório"; ?> </body> </html>
A lógica solução está na página de IF e ELSE aninhados.
Note como a solução ficou menor, isso pois agrupamos duas expressões:
- $idade < 18 (já é igual ou mair que 16)
- $idade > 65
Pois ambas são de voto facultivo!
Viu como os operadores lógicos deixam nosso código menor, permitindo agrupar diversas expressões ao mesmo tempo?