Cita: Los operadores and y && y los operadores or y || no son completamente equivalentes, ya que no tienen la misma precedencia. Concretamente, && y || tienen mayor prioridad que and y or. Como además el operador de asignación = tiene una prioridad intermedia, se pueden producir situaciones inesperadas, como muestran los siguientes ejemplos.
El ejemplo siguiente muestra el resultado esperado:
Código PHP:
Ver original$var1 = TRUE;
$var2 = FALSE;
$todo = $var1 && $var2;
if ($todo) {
print "<p>verdadero</p>";
} else {
print "<p>falso</p>";
}
//Imprime falso
Cita: La variable $todo sólo tomaría el valor TRUE si tanto $var1 como $var2 fueran TRUE, pero como $var2 es FALSE, $todo toma el valor FALSE.
Sin embargo si se utiliza el operador and en vez de &&, el resultado no es el esperado:
Código PHP:
Ver original$var1 = TRUE;
$var2 = FALSE;
$todo = $var1 and $var2;
if ($todo) {
print "<p>verdadero</p>";
} else {
print "<p>falso</p>";
}
//Imprime verdadero
Cita: ¿Por qué se produce ese resultado? Porque el operador de asignación = tiene precedencia sobre el operador and. Eso quiere decir que PHP realiza antes la asignación que la operación lógica, es decir, como si la expresión estuviese escrita así:
Código PHP:
Ver original($todo = $var1) and $var2; //verdadero
Cita: En esa expresión, la variable $todo almacena el valor de la variable $var1 (TRUE), por lo que $todo toma el valor TRUE. La operación lógica and no modifica el valor de $todo.
Si se quiere obtener el mismo resultado con and que con &&, se deben utilizar paréntesis, para forzar que la operación lógica and se realice antes de la asignación:
Código PHP:
Ver original$var1 = TRUE;
$var2 = FALSE;
$todo = ($var1 and $var2);
if ($todo) {
print "<p>verdadero</p>";
} else {
print "<p>falso</p>";
}
//Imprime falso
Información sacada de esta
Fuente
Espero que te sirva
Saludos