tipo son simbolo significa que por operadores los logicos expresiones ejemplo cuales condiciones php operators logical-operators or-operator

php - son - Operadores lógicos, || ¿o o?



que significa-> en php (8)

Algunos lenguajes usan cualquier cortocircuito, otros usan una evaluación booleana completa (si usted sabe, esto es similar a la directiva $B en pascal)

Explicaciones

function A(){ ...do somethings.. return true; } function B(){ ...do somethings.. return true; } if ( A() OR B() ) { .....

En este ejemplo, la función B() nunca se ejecutará. Como la función A() devuelve TRUE, el resultado de la instrucción OR se conoce desde la primera parte sin que sea necesario evaluar la segunda parte de la expresión.

Sin embargo, con ( A() || B() ) , la segunda parte siempre se evalúa independientemente del valor de la primera.

Para una programación optimizada, siempre debe usar OR que sea más rápido (excepto en el caso en que la primera parte devuelva false y la segunda parte realmente necesite ser evaluada).

Recuerdo haber leído hace un tiempo respecto a los operadores lógicos que en el caso de OR , usando || era mejor que or (o viceversa).

Solo tuve que usar esto en mi proyecto cuando me llegó, pero no recuerdo qué operador fue recomendado o si era cierto.

¿Cuál es mejor y por qué?


Fuente: http://bit.ly/1hxDmVR

Aquí hay un código de muestra para trabajar con operadores lógicos:

<html> <head> <title>Logical</title> </head> <body> <?php $a=10; $b=20; if($a>$b) { echo " A is Greater"; } elseif($a<$b) { echo " A is lesser"; } else { echo "A and B are equal"; } ?> <?php $c=30; $d=40; //if(($a<$c)AND($b<$d)) if(($a<$c)&&($b<$d)) { echo "A and B are larger"; } if(isset($d)) $d=100; echo $d; unset($d); ?> <?php $var1=2; switch($var1) { case 1:echo "var1 is 1"; break; case 2:echo "var1 is 2"; break; case 3:echo "var1 is 3"; break; default:echo "var1 is unknown"; } ?> </body> </html>


La diferencia entre respectivamente || y OR y && y AND es la precedence :

$bool = FALSE || TRUE;

  • interpretado como ($bool = (FALSE || TRUE))
  • el valor de $bool es TRUE

$bool = FALSE OR TRUE;

  • interpretado como (($bool = FALSE) OR TRUE)
  • el valor de $bool es FALSE

$bool = TRUE && FALSE;

  • interpretado como ($bool = (TRUE && FALSE))
  • el valor de $bool es FALSE

$bool = TRUE AND FALSE;

  • interpretado como (($bool = TRUE) AND FALSE)
  • el valor de $bool es TRUE

No creo que uno sea intrínsecamente mejor que otro, pero sugiero seguir con || porque es el predeterminado en la mayoría de los idiomas.

EDITAR: Como otros han señalado, de hecho hay una diferencia entre los dos.


No hay "mejor", pero el más común es || . Tienen una precedence diferente y || funcionaría como uno esperaría normalmente.

Ver también: operadores lógicos ( se toma el siguiente ejemplo a partir de ahí ):

// The result of the expression (false || true) is assigned to $e // Acts like: ($e = (false || true)) $e = false || true; // The constant false is assigned to $f and then true is ignored // Acts like: (($f = false) or true) $f = false or true;


No hay nada malo o mejor, solo depende de la precedencia de los operadores. Como || tiene una precedencia mayor que or , entonces || se usa principalmente.


Sé que es un tema viejo, pero aún así. Acabo de encontrar el problema en el código que estoy depurando en el trabajo y tal vez alguien tenga un problema similar ...

Digamos que el código se ve así:

$positions = $this->positions() || [];

Usted esperaría (como está acostumbrado de, por ejemplo, javascript) que cuando $ this-> positions () devuelve falso o nulo, $ positions es una matriz vacía. Pero no lo es. El valor es VERDADERO o FALSO depende de lo que devuelva $ this-> positions ().

Si necesita obtener un valor de $ this-> positions () o una matriz vacía, debe usar:

$positions = $this->positions() or [];

EDITAR:

El ejemplo anterior no funciona como se pretendía, pero la verdad es que || y or no es lo mismo ... Prueba esto:

<?php function returnEmpty() { //return "string"; //return [1]; return null; } $first = returnEmpty() || []; $second = returnEmpty() or []; $third = returnEmpty() ?: []; var_dump($first); var_dump($second); var_dump($third); echo "/n";

Este es el resultado:

bool(false) NULL array(0) { }

Entonces, ¿en realidad la tercera opción ?: Es la solución correcta cuando desea establecer un valor devuelto o una matriz vacía.

$positions = $this->positions() ?: [];

Probado con PHP 7.2.1


Se usan para diferentes propósitos y, de hecho, tienen diferentes precedencias de operador. El && y || los operadores están pensados ​​para condiciones booleanas, mientras que and y están destinados para el flujo de control.

Por ejemplo, la siguiente es una condición booleana:

if ($foo == $bar && $baz != $quxx) {

Esto difiere del flujo de control:

doSomething() or die();