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á$xdebido a un cortocircuito, no debido a una mayor precedencia.27 or 0regresa27por mi.ordevuelve booleano. Su precedencia es tan baja que a veces parece que hace otra cosa. :)print 27 or 0se imprimiría27porqueorsucede despuésprint 27. Por cierto,echono se engaña -echo 27 or 0saldrí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 queandyorestá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áfalseonull? ¿Y sidoSomething()regresatrueo 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))$boolesTRUE$bool = FALSE OR TRUE;(($bool = FALSE) OR TRUE)$boolesFALSE$bool = TRUE && FALSE;($bool = (TRUE && FALSE))$boolesFALSE$bool = TRUE AND FALSE;(($bool = TRUE) AND FALSE)$boolesTRUEfuente
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
||yorno 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
$Ben 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
ORque sea más rápida (excepto en el caso en que la primera parte regresefalsey la segunda parte realmente necesite ser evaluada).fuente
||,Bno se llamará. Ambos operadores hacen exactamente lo mismo, excepto que la precedencia es diferente.