Recuerdo haber leído hace un tiempo sobre los operadores lógicos que, en el caso de OR
, usar ||
era mejor que or
(o viceversa).
Solo tenía que usar esto en mi proyecto cuando volví a mí, pero no puedo recordar qué operador se recomendó o si era cierto.
¿Cuál es mejor y por qué?
php
operators
logical-operators
or-operator
SuPronunciado
fuente
fuente
$e = true || $x = 'foo'
no se definirá$x
debido a un cortocircuito, no debido a una mayor precedencia.27 or 0
regresa27
por mi.or
devuelve booleano. Su precedencia es tan baja que a veces parece que hace otra cosa. :)print 27 or 0
se imprimiría27
porqueor
sucede despuésprint 27
. Por cierto,echo
no se engaña -echo 27 or 0
saldría1
.Se utilizan para diferentes propósitos y de hecho tienen diferentes precedencias de operadores. Los operadores
&&
y||
están pensados para condiciones booleanas, mientras queand
yor
están pensados para controlar el flujo.Por ejemplo, la siguiente es una condición booleana:
Esto difiere del flujo de control:
fuente
die()
se llamará a la función sidoSomething()
volveráfalse
onull
? ¿Y sidoSomething()
regresatrue
o nada?doSomething()
se evalúa como booleano. Si devuelve un valor que PHP considera verdadero (true
, una cadena no vacía, etc.), no llamarádie()
.La diferencia entre respectivamente || y OR y && y AND es la precedencia del operador :
$bool = FALSE || TRUE;
($bool = (FALSE || TRUE))
$bool
esTRUE
$bool = FALSE OR TRUE;
(($bool = FALSE) OR TRUE)
$bool
esFALSE
$bool = TRUE && FALSE;
($bool = (TRUE && FALSE))
$bool
esFALSE
$bool = TRUE AND FALSE;
(($bool = TRUE) AND FALSE)
$bool
esTRUE
fuente
Fuente: http://wallstreetdeveloper.com/php-logical-operators/
Aquí hay un código de muestra para trabajar con operadores lógicos:
fuente
Sé que es un tema antiguo, pero aún así. Acabo de encontrar el problema en el código que estoy depurando en el trabajo y tal vez alguien pueda tener un problema similar ...
Digamos que el código se ve así:
Usted esperaría (como está acostumbrado a, por ejemplo, javascript) que cuando $ this-> posiciones () devuelve falso o nulo, $ posiciones es una matriz vacía. Pero no lo es. El valor es VERDADERO o FALSO depende de lo que devuelva $ this-> posiciones ().
Si necesita obtener el valor de $ this-> posiciones () o una matriz vacía, debe usar:
EDITAR:
El ejemplo anterior no funciona como se esperaba pero la verdad es que
||
yor
no es lo mismo ... Prueba esto:Este es el resultado:
Entonces, en realidad, la tercera opción
?:
es la solución correcta cuando desea establecer un valor devuelto o una matriz vacía.Probado con PHP 7.2.1
fuente
$positions = $this->positions() ?? [];
es probablemente lo que quieres.No creo que uno sea intrínsecamente mejor que otro, pero sugeriría seguir con || porque es el predeterminado en la mayoría de los idiomas.
EDITAR: Como otros han señalado, de hecho existe una diferencia entre los dos.
fuente
No hay nada malo o mejor, solo depende de la precedencia de los operadores. Dado que
||
tiene mayor precedencia queor
, por lo que||
se usa principalmente.fuente
Algunos lenguajes usan cortocircuito y otros usan evaluación booleana completa (si lo sabe, esto es similar a la directiva
$B
en Pascal).Explicaciones:
En este ejemplo, la función
B()
nunca se ejecutará. Dado que la funciónA()
devuelve VERDADERO, el resultado de la instrucción OR se conoce a partir de la primera parte sin que sea necesario evaluar la segunda parte de la expresión.Sin embargo
( A() || B() )
, la segunda parte siempre se evalúa independientemente del valor de la primera.Para una programación optimizada, siempre debe usar la
OR
que sea más rápida (excepto en el caso en que la primera parte regresefalse
y la segunda parte realmente necesite ser evaluada).fuente
||
,B
no se llamará. Ambos operadores hacen exactamente lo mismo, excepto que la precedencia es diferente.