Outros lugares onde pode usar o “or” no PHP
Postado por: Anderson Custódio emMuitos pensam que o “or” só pode ser usado dentro do “if”. Por exemplo:
if ($a == 1 or $a == 2) {
echo '$a tem o valor de 1 ou 2';
}
Mas tem outras formas, acho que não tem muito o que explicar, então só vou fazer alguns exemplos.
// Se o arquivo não existir mostra a mensagem de não encontrado
file_exists('tpl.php') or die('Arquivo não encontrado');
// Se teste não tiver valor é atribuído um
$teste or $teste = 'ok';
// Se teste tiver valor é atribuído outro
!$teste or $teste = 'outro'; //repare o "!" na frente da váriavel teste
// Se teste não tiver valor executo uma função
$teste or funcao();
// Se teste for igual a "outro" é atribuído outro valor
$teste == 'outro' or $teste = 'outro valor';
// Se teste for diferente a "outro" executa uma função
$teste != 'outro' or funcao();
Bom é isso, apenas alguns exemplos para dar uma noção do que se pode fazer, qualquer erro me avisem, próximo artigo vai ser sobre URLs Amigáveis, to devendo a um tempão =/
PS: Descobri fazendo alguns testes, não sei se tem documentação sobre isso, e só testei no PHP5.













Isso é meio obvio, imagine um if com várias condições usando OR entre elas, o PHP para a verificação assim que ele encontra a primeira verdadeira… a mesma coisa funciona fora do IF..
Exemplo de programa de uma linha onde as variaveis não foram definidas..
if (1==1 or $a or $b or $c) echo “nao deu erro”;
isso não gera a notice por que a primeira condição já foi verdadeira e o php ignorou as outras.
[]’s
Sim sim, só estou falando que pode ser usado fora do if, esses exemplos foi para quem está iniciando poder entender.
Muito bom Anderson,
Com isso é muito simples criar, por exemplo a tão famigerada zebra de uma tabela.
$zebra = ‘par’;
foreach (range(1,10) as $item) {
$zebra != ‘par’ AND $zebra = ‘par’ OR $zebra = ‘impar’;
print ($zebra.”\n”);
}
Óbvio que seria possivel fazer isso com ternário, mas demonstra-se assim como é potente o uso de AND e OR não somente dentro de IF.
Ps: Isso é uma referencia de uso de ternário em Python (que não existe). E já que não existe algumas vezes nos deparamos com essa forma de fazer.
Essa é uma daquelas que que parecem óbvias… só que de repente você vê que nem todo mundo sabe…
Essa teoria não serve apenas para o PHP.
Todas as linguagens possuem essa opção, e não serve apenas para o ‘or’, serve para todas as condições!
Abs
Pois é, pequei um pouco no título, também usei condições de igualdade e diferença,
evitei fazer algo como “!($a > $b and $c != $d) or $msg = ‘A maior que B e C diferente de D’;” porque no lugar disso seria preferível usar um if mesmo, mas vou fazer outro post com mais detalhes e explicar melhor para quem está começando pode entender.
Valeu pelo toque!
DGMIKE
para a zebra tem soluções mais simples:
$zebras = array(‘par’, ‘impar’);
foreach (range(1,10) as $item) {
print ($zebras[$item % 2].”\n”);
}
e se a zebra for colorida com N cores (lol)
$zebras = array(‘z1’, z2′, ‘z3′);
foreach (range(1,10) as $item) {
print ($zebras[$item % (count(zebras)-1)].”\n”);
}
fica ai a dica
[]’s
ops.. acabei de acordar, não tem o -1 no segundo exemplo
$zebras = array(‘z1’, z2′, ‘z3′);
foreach (range(1,10) as $item) {
print ($zebras[$item % (count(zebras))].”\n”);
}
[]‘
@Carlos André Ferrari Não se trata bem da solução mais simples, mas demostrar o uso de condições fora do if, while e etc… Mas valeu!
Sim sim… só mostrei o uso do mod no php da mesma forma que os outros operadores, e no caso da zebra simplifica muito.
[]’s
Haaa.. Agora que prestei atenção no print, muito bom!
Independente de dizerem que é óbvio ou não, é uma ÓTIMA dica. Parabéns.
Bom Anderson,
nao é tao simples assim. Achei um problema nos seus exemplos. Uma coisa que poucas pessoas conhecem e estudam e a precedencia dos sinais de comparaçao.
O exemplo file_exists(‘tpl.php’) or die(‘Arquivo não encontrado’); nao é valido, pq caso seja invertido:
die(‘Arquivo não encontrado’) or file_exists(‘tpl.php’);
mesmo o arquivo existindo ele apresentará a mensagem “Arquivo não encontrado”.
A explicação fica mais facil se fizermos assim:
$retorno = false or true;
var_dump($retorno);
qual a resposta ?
true, certo ?
nao … a resposta é false. Pq ?? Simples, a precendencia do sinal de “=” e maior que a do “or”, por isso ele recebe o valor false antes da comparação..
A solução é trocar o sinal “or” pelo sinal que trabalha bit a bit que é o “||”
$retorno = false || true;
var_dump($retorno); //true
agora sim a sentença apresenta o valor esperado. Quando estudei isso nunca mais usei operadores como “or” e “and” …
T+ pessoal !
file_exists(‘tpl.php’) or die(’Arquivo não encontrado’); Está certo, se não tiver tpl.php no mesmo diretório onde se encontra o arquivo de teste vai aparecer Arquivo não encontrado, die e exit são a mesma coisa, logo se você colocar ele antes do or vai parar o código e mostrar a mensagem.
Bom,
pra mim uma sentença com “or” válida pode ser invertida sem alterar seu resultado. Aliás, essa é a idéia.
Mas como o artigo é demonstrativo, nao vou entrar em mais delongas…
interessante ^_^
@Diogo Olha o primerio comentário do @Carlos André Ferrari que você vai entender como funciona o or.
Eu ia explicar como o or é aplicado nos exemplos, mas no lugar de atualizar vou fazer outro post mais completo explicando todos os detalhes.
Anderson, entendo que o or para na primeira verificação que retornar true …
mas foi o que eu disse, a sentença do @Carlos André Ferrari pode ser invertida que apresentará o mesmo resultado. Mas mesmo no caso dele existe falha, nao se deve verificar variavel com apenas um if($a or $b or $c) … a variavel pode existir e ter o valor false. O ideal é usar isset(). Mas creio que aquilo foi um exemplo rapido.
uma explicação simples de como isso so funciona por causa da precendencia é o exemplo:
$bd = mysqli_connect(xxx) or die(“erro no banco”);
essa sentença so é executada com sucesso pq está dessa maneira; pq se for invertida o die é executado diretamente.
Uma sentença or, ao meu ver, é que nem aquela regrinha mais básica de multiplicaçao: “a ordem dos fatores nao altera o resultado”. Desse jeito que foi apresentado, funciona, mas qq modificaçao ela pode apresentar algum problema …
Realmente me expressei mal, a intenção era dizer para tomarem cuidado e utilizarem somente dessa forma, pq de qq outra ela parará de funcionar automaticamente.
É so uma preocaução, pq ao divulgarmos uma materia, nos tornamos exemplos, entao todo cuidado é pouco !
Desculpe qq mal entendido ! Abraços !
Parabéns pelo post, muito interessante!