Ver Mensaje Individual
  #6 (permalink)  
Antiguo 21/02/2013, 08:32
Avatar de jonni09lo
jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 13 años, 2 meses
Puntos: 397
Respuesta: seguridad de accesos con $_SESSION

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
  1. $var1 = TRUE;
  2. $var2 = FALSE;
  3. $todo = $var1 && $var2;
  4. if ($todo) {
  5.     print "<p>verdadero</p>";
  6. } else {
  7.     print "<p>falso</p>";
  8. }
  9.  
  10. //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
  1. $var1 = TRUE;
  2. $var2 = FALSE;
  3. $todo = $var1 and $var2;
  4. if ($todo) {
  5.     print "<p>verdadero</p>";
  6. } else {
  7.     print "<p>falso</p>";
  8. }
  9. //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
  1. ($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
  1. $var1 = TRUE;
  2. $var2 = FALSE;
  3. $todo = ($var1 and $var2);
  4. if ($todo) {
  5.     print "<p>verdadero</p>";
  6. } else {
  7.     print "<p>falso</p>";
  8. }
  9. //Imprime falso

Información sacada de esta Fuente

Espero que te sirva

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.