php - que - el arte de pedir un favor
PHP-y/o palabras clave (4)
Es &&
lo mismo que "y", y es ||
lo mismo que "o" en PHP?
He hecho algunas pruebas, y parece que se comportan igual. ¿Hay alguna diferencia?
Si no, ¿hay algún otro signo de PHP que tenga palabras equivalentes y cree que hace que el código sea más fácil de leer?
La diferencia está en la precedencia . ¡Pero no solo comparado el uno con el otro!
En la mayoría de los casos no le importará, pero hay casos específicos en los que tiene que retroceder un paso y observar el panorama general. Toma esto, por ejemplo:
// The result of the expression (true && false) is assigned to $g
// Acts like: ($g = (true && false))
$g = true && false;
// The constant true is assigned to $h before the "and" operation occurs
// Acts like: (($h = true) and false)
$h = true and false;
var_dump($g, $h);
Esto producirá, respectivamente:
bool(false)
bool(true)
En otras palabras, &&
tiene una preferencia mayor que =
, que tiene una precedencia mayor que and
, como se indica en http://php.net/manual/en/language.operators.precedence.php . (Se menciona en otras respuestas, pero creo que vale la pena detallar, ya que un mal uso puede conducir a errores lógicos)
Espero que te pueda ayudar. Puede encontrar más en http://php.net/manual/en/language.operators.logical.php
Lo que me molesta es:
echo (false and false ? true : true);
// (empty/false)
Puede adivinar que solo existe la salida posible de "1" (verdadero) ya que no hay ningún caso que pueda generar un resultado falso ... ... pero será "" (falso).
Usar && como operador en este caso satisface al menos mis expectativas:
echo (false && false ? true : true);
// 1
Entonces, en algunos casos, el uso es importante.
Sí, son lógicamente lo mismo. (Creo que "&&" y "||" son la opción preferida en los estándares de codificación de Zend , pero no puedo encontrar ninguna información específica sobre esto, por lo que podría haber sido un sueño. O algo así.)
Eso dijo:
"&&" y "||" tienen una http://www.php.net/manual/en/language.operators.precedence.php que "Y" y "O" (es poco probable que alguna vez sea relevante, pero nunca se sabe).
Muchos otros lenguajes usan "&&" y "||", en lugar de los equivalentes de texto, por lo que podría ser una idea ir con esto.
Siempre y cuando uses el conjunto de operadores elegido consistentemente, realmente no importa.
&&
or
tienen una precedencia más baja que &&
y ||
. Para ser más exactos, &&
y ||
tiene mayor prioridad que el operador de asignación ( =
) while and
y or
have lower.
http://www.php.net/manual/en/language.operators.precedence.php
Por lo general, no hace una diferencia, pero hay casos en los que no saber acerca de esta diferencia puede causar un comportamiento inesperado. Vea ejemplos aquí: