Outros lugares onde pode usar o “or” no PHP

Postado por: Anderson Custódio em

Muitos 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.

Posts Relacionados

Confira também outros artigos interessantes postados aqui no blog.

Sobre Anderson Custódio

Anderson Custódio de Oliveira é desenvolvedor web, utiliza como linguagem server side o PHP e mora na cidade de Cafelândia - SP.

20 Responses to “Outros lugares onde pode usar o “or” no PHP”

  1. 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

  2. Sim sim, só estou falando que pode ser usado fora do if, esses exemplos foi para quem está iniciando poder entender.

  3. 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.

  4. Essa é uma daquelas que que parecem óbvias… só que de repente você vê que nem todo mundo sabe…

  5. 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

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

  7. 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

  8. 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”);
    }

    []‘

  9. @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! :)

  10. 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

  11. Haaa.. Agora que prestei atenção no print, muito bom! :)

  12. Independente de dizerem que é óbvio ou não, é uma ÓTIMA dica. Parabéns.

  13. 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 !

  14. 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.

  15. Diogo

    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…

  16. @Diogo Olha o primerio comentário do @Carlos André Ferrari que você vai entender como funciona o or.

  17. Eu ia explicar como o or é aplicado nos exemplos, mas no lugar de atualizar vou fazer outro post mais completo explicando todos os detalhes.

  18. Diogo

    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 !

  19. Parabéns pelo post, muito interessante!

Leave a Reply