Eu me lembro de ter lido um tempo atrás a respeito de operadores lógicos que no caso de OR
, using ||
era melhor do que or
(ou vice-versa).
Eu só tive que usar isso no meu projeto quando ele voltou para mim, mas não consigo lembrar qual operador foi recomendado ou se era mesmo verdade.
Qual é melhor e por que?
php
operators
logical-operators
or-operator
ItsPronounce
fonte
fonte
$e = true || $x = 'foo'
não definirá$x
por causa de curto-circuito, não por causa de maior precedência.27 or 0
retorna27
para mim.or
retorna booleano também. Apenas sua precedência é tão baixa que às vezes parece que faz outra coisa. :)print 27 or 0
imprimiria27
porqueor
acontece depoisprint 27
. BTW,echo
não se engane -echo 27 or 0
seria a saída1
.Eles são usados para finalidades diferentes e, na verdade, têm precedências de operador diferentes. Os operadores
&&
e||
destinam-se a condições booleanas, enquantoand
eor
destinam-se ao fluxo de controle.Por exemplo, o seguinte é uma condição booleana:
Isso difere do fluxo de controle:
fonte
die()
a função será chamada sedoSomething()
retornaráfalse
ounull
? E sedoSomething()
retornartrue
ou nada?doSomething()
é avaliado como booleano. Se ele retornar um valor que o PHP considera verdadeiro (true
uma string não vazia, etc.), ele não chamarádie()
.A diferença entre respectivamente || e OR e && e AND é a precedência do operador :
$bool = FALSE || TRUE;
($bool = (FALSE || TRUE))
$bool
éTRUE
$bool = FALSE OR TRUE;
(($bool = FALSE) OR TRUE)
$bool
éFALSE
$bool = TRUE && FALSE;
($bool = (TRUE && FALSE))
$bool
éFALSE
$bool = TRUE AND FALSE;
(($bool = TRUE) AND FALSE)
$bool
éTRUE
fonte
Fonte: http://wallstreetdeveloper.com/php-logical-operators/
Aqui está um exemplo de código para trabalhar com operadores lógicos:
fonte
Eu sei que é um assunto antigo, mas ainda assim. Acabei de encontrar o problema no código que estou depurando no trabalho e talvez alguém possa ter um problema semelhante ...
Digamos que o código seja assim:
Você esperaria (como está acostumado a fazer, por exemplo, em javascript) que quando $ this-> position () retornasse falso ou nulo, $ position fosse um array vazio. Mas não é. O valor é TRUE ou FALSE depende do que $ this-> position () retorna.
Se você precisa obter o valor de $ this-> posições () ou array vazio, você tem que usar:
EDITAR:
O exemplo acima não funciona como pretendido, mas a verdade é que
||
eor
não é o mesmo ... Tente isto:Este é o resultado:
Portanto, na verdade, a terceira opção
?:
é a solução correta quando você deseja definir o valor retornado ou o array vazio.Testado com PHP 7.2.1
fonte
$positions = $this->positions() ?? [];
é provavelmente o que você deseja.Não acho que um seja inerentemente melhor do que outro, mas sugiro ficar com || porque é o padrão na maioria dos idiomas.
EDIT: Como outros apontaram, realmente há uma diferença entre os dois.
fonte
Não há nada de ruim ou melhor, depende apenas da precedência dos operadores. Uma vez que
||
tem precedência mais alta queor
, então||
é mais usado.fonte
Algumas linguagens usam curto-circuito, e outras usam avaliação booleana completa (se você sabe, isso é semelhante à diretiva
$B
em Pascal).Explicações:
Neste exemplo, a função
B()
nunca será executada. Como a funçãoA()
retorna TRUE, o resultado da instrução OR é conhecido desde a primeira parte sem que seja necessário avaliar a segunda parte da expressão.No entanto
( A() || B() )
, com , a segunda parte é sempre avaliada independentemente do valor da primeira.Para uma programação otimizada, você deve sempre usar o
OR
que é mais rápido (exceto no caso em que a primeira parte retornafalse
e a segunda parte realmente precisa ser avaliada).fonte
||
,B
não será chamado. Ambos os operadores fazem exatamente o mesmo, exceto que a precedência é diferente.