2010-12-21 16 views
21

¿Es && lo mismo que "y", y es || lo mismo que "o" en PHP?PHP - y/o palabras clave

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?

+0

Old VB programmer, ey? Sí, '&&' es AND, pero '&' es AND (bit a bit). Liekwise para '||' y '|' son OR y OR (bitwise), respectivamente. :: Lo llevo de vuelta, PHP permite Y/O palabras - increíble. Aprenda algo nuevo cada día. –

+0

no :) Empecé con Turbo Pascal, y admito que me gusta más el pascal synthax :) – Alex

+1

@Alex: Ah, los días de Pascal/Delphi. Cómo aborrezco, me equivoco, me refiero a _love_, esos días ... –

Respuesta

34

and y or tienen superior menor precedencia que && y ||. Para ser más exactos, && y || tienen mayor prioridad que el operador de asignación (=), mientras que and y or tienen menor.

http://www.php.net/manual/en/language.operators.precedence.php

Por lo general, no hace una diferencia, pero hay casos en que no saber acerca de esta diferencia puede causar un comportamiento inesperado. Véanse los ejemplos aquí:

http://php.net/manual/en/language.operators.logical.php

+1

Los comentarios en http://php.net/manual/en/language.operators.php indican que tienen diferente precedencia relativa a '=' también. –

+0

@Thomas: que también está documentado en el primer enlace de mi respuesta;) Pero ... en realidad esta es quizás la diferencia más importante. Lo agregaré a la respuesta. – Mchl

+1

La precedencia inferior a la asignación de 'o' puede ser útil: $ page = get_page() o $ page = 1; –

5

sí, son lógicamente la misma. (Creo que "& &" y "||" son la opción preferida en el Zend coding standards, pero no puedo encontrar ninguna información específica sobre este tema, por lo que podría haber sido todo un sueño. O algo.)

Eso dijo:

  1. "& &" y "||" son de higher precedence que "Y" y "O" (es poco probable que alguna vez sean relevantes, pero nunca se sabe).

  2. Una gran cantidad de otros lenguajes usan "& &" y "||", en lugar de los textos equivalentes por lo que podría ser una buena idea para ir con esto.

  3. Siempre y cuando utilice su conjunto de operadores elegidos consistentemente, realmente no importa.

+0

Podría marcar una gran diferencia si la precedencia de "=" (asignación) está entre los dos operadores, que [es realmente el caso] (http://php.net/manual/en/language.operators.precedence.php)! –

2

Lo que me molesta es:

echo (false and false ? true : true); 
// (empty/false) 

Es posible adivinar sólo existe la posible salida de "1" (verdadero) ya que no hay caso, que podría generar una falsa ... .. .pero será "" (falso).

Usando & & como operador en este caso satifies al menos mis expectativas:

echo (false && false ? true : true); 
// 1 

Así, en algunos casos, las cuestiones de uso de manera significativa.

0

La diferencia está en el 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 preferencia mayor que =, que tiene mayor precedencia 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 lo pueda ayudar. Puede encontrar más en http://php.net/manual/en/language.operators.logical.php