Foros del Web » Programando para Internet » PHP »

No compredo por qué funciona el siguiente código

Estas en el tema de No compredo por qué funciona el siguiente código en el foro de PHP en Foros del Web. Hola a todos. Estoy aprendiendo php y me encuentrado con lo siguiente. Que yo sepa, isset() devuelve un valor boleano. Teniendo esto en cuenta no ...
  #1 (permalink)  
Antiguo 12/08/2007, 12:34
 
Fecha de Ingreso: agosto-2007
Mensajes: 9
Antigüedad: 17 años, 3 meses
Puntos: 0
No compredo por qué funciona el siguiente código

Hola a todos.
Estoy aprendiendo php y me encuentrado con lo siguiente.
Que yo sepa, isset() devuelve un valor boleano. Teniendo esto en cuenta no entiendo como puede ser que funcione el siguiente código.

for ($i=1; $i <=4; $i++) {
if (isset($_GET['whichpage']) == $i) {
//instrucciones a ejecutar en caso de que $_GET['whichpage'] sea igual a $i
}else{
////instrucciones a ejecutar en caso de que $_GET['whichpage'] no sea igual a $i
}

Yo creo que la la condicion del "if" se cumple siempre, puesto que isset() en este caso siempre devuelve TRUE y $1 tambien es TRUE.
Pues resulta que no, que si $_GET['whichpage'] no vale lo mismo que $i no se cumple la condición.
He probado el programa eliminando el isset y dejando el $_GET['whichpage'] pelado y funciona exactamente igual.
El programa es un ejemplo del libro "Fundamentos PHP5" de Anaya Multimedia, página 150.

Saludos y gracias.
  #2 (permalink)  
Antiguo 12/08/2007, 13:26
 
Fecha de Ingreso: enero-2007
Ubicación: Buenos Aires, ARG
Mensajes: 71
Antigüedad: 17 años, 10 meses
Puntos: 2
Re: No compredo por qué funciona el siguiente código

..."si $_GET['whichpage'] no vale lo mismo que $i no se cumple la condición"...

Lo q pasa es que el if evalua la igualdad, no si cada uno por separado es TRUE....o sea q está bien: el if solo será verdadero si se cumple la condición, o sea si las dos variables son =
  #3 (permalink)  
Antiguo 12/08/2007, 13:41
 
Fecha de Ingreso: agosto-2007
Mensajes: 9
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: No compredo por qué funciona el siguiente código

¿Entonces debo entender que el signo == no está comparando el valor devuelto por "isset($_GET['whicpage'])" con $i si no $_GET['whicpage'] con $i?

Si es así lo que no entiendo es que papel juega en esto el isset(), puesto que en caso de que whichpage no estuviera definido tampoco seria igual a $i, por lo que da igual si hay un isset() o no, y si está definido pues el isset() tampoco pinta nada.
Estoy por pensar que es un error del libro...
  #4 (permalink)  
Antiguo 12/08/2007, 17:13
 
Fecha de Ingreso: enero-2006
Mensajes: 293
Antigüedad: 18 años, 10 meses
Puntos: 4
Re: No compredo por qué funciona el siguiente código

Exactamente... isset devuelve un boleano... y contando que $i es un contador que va de 1 hasta 4.. en tu condición estas haciendo mas o menos esto:

Código PHP:
for ($i=1$i <=4$i++) {
   if (isset(
$_GET['whichpage']) == $i) {
      ...
   } 
....................

Código PHP:
if (TRUE == 1) {
...
}
if (
TRUE == 2) {
...
}
if (
TRUE == 3) {
...
}
if (
TRUE == 4) {
...

saludos
  #5 (permalink)  
Antiguo 12/08/2007, 17:30
 
Fecha de Ingreso: agosto-2007
Mensajes: 9
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: No compredo por qué funciona el siguiente código

Pues ahora si que no entiendo nada de nada.
Esa era mi suposición inicial, pero la evidencia me la refutó, puesto que no siempre se cumple la igualdad.
Si todo fuera como tu dices siempre tendría que cumplirse.
  #6 (permalink)  
Antiguo 12/08/2007, 17:47
 
Fecha de Ingreso: enero-2006
Mensajes: 293
Antigüedad: 18 años, 10 meses
Puntos: 4
Re: No compredo por qué funciona el siguiente código

No... estas comparando explícitamente TRUE contra el número 1....

Mmm.. mira...

If(TRUE == TRUE)... entra la condición...

if(1 == 1)... entra a la condición...

TRUE es diferente de 1...

if(TRUE == 1) ... NO ENTRA A LA CONDICIÓN..y se va por el ELSE si acaso tiene...
  #7 (permalink)  
Antiguo 12/08/2007, 17:49
 
Fecha de Ingreso: enero-2006
Mensajes: 293
Antigüedad: 18 años, 10 meses
Puntos: 4
Re: No compredo por qué funciona el siguiente código

Tu variable $i..conforme va pasando las vueltas del bucle.. va tomando valores de números enteros...

1....2.....3.....4....

Ninguno de estos números es igual a TRUE..... si me entiendes?


¿Qué es lo que quieres hacer con esa condición?
  #8 (permalink)  
Antiguo 12/08/2007, 18:57
 
Fecha de Ingreso: agosto-2007
Mensajes: 9
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: No compredo por qué funciona el siguiente código

Voy a ver si resumo la situación, pero antes quiero decir que yo partia de la suposición (quizas erronea) de que si se compara un valor numérico con uno boleano el numerico sera siempre "TRUE" a no ser que sea cero.

Ahora el resumen:
En un libro de php me encuentro el siguiente código, que sirve para demostrar el tema de las sesiones de usuario:
Código:
<?php
session_register('view1count');
session_register('view2count');
session_register('view3count');
session_register('view4count');
?>

<?php
  echo "<html><head><title>Web Page Hit counter</title></head><body>";
  if(isset($_GET['whichpage'])) {
    echo "<b>You are currently on page $_GET[whichpage].</b><br><br>\n";
    $_SESSION["view".$_GET['whichpage']."count"]++;
  }

  for($i=1; $i<=4; $i++) {
    if(isset($_GET['whichpage']) == $i) {
      echo "<b><a href=\"sessions.php?".session_id()."&whichpage=$i\">Page $i</a></b>";
    }else{
      echo "<a href=\"sessions.php?".session_id()."&whichpage=$i\">Page $i</a>";
    }
  echo ", which you have chosen ".$_SESSION["view".$i."count"]."times.<br>\n";
  }

echo "\n\n<br><br>\n\n";
echo "</body></html>";
?>
De este código lo que no me cuadra es que si "$_GET['whichpage']" y "$i" no son iguales no se cumple que "isset($_GET['whichpage']) == $i"
Yo creo que tiene que cumplirse siempre porque "$i" nunca es 0 y "isset($_GET['whichpage'])" siempre es TRUE.

He ejecutado el script y ha quedado demostrado que estoy equivocado, porque solo se cumple la condicion si "$_GET['whichpage']" y "$i" son iguales.

Yo creia que "isset($_GET['whichpage']) == $i" era lo mismo que decir TRUE== TRUE, pero no es así.
No se si he explicado bien mi problema.

Saludos y gracias por la paciencia.
  #9 (permalink)  
Antiguo 12/08/2007, 19:47
 
Fecha de Ingreso: enero-2006
Mensajes: 293
Antigüedad: 18 años, 10 meses
Puntos: 4
Re: No compredo por qué funciona el siguiente código

Eso lo sacaste de un libro dices?...

Tampoco le hayo mucho sentido al
Código PHP:
if(isset($_GET['whichpage']) == $i) { 
La verdad, lo único que se me ocurre, es como dices, que sea un error del libro, pero tampoco te lo puedo asegurar...
  #10 (permalink)  
Antiguo 12/08/2007, 20:04
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.489
Antigüedad: 22 años, 3 meses
Puntos: 2114
Re: No compredo por qué funciona el siguiente código

La verdad es que es la primera vez que veo un isset() así. Acabo de mirar el manual, y tampoco sale nada.

Una cosa es
Código PHP:
if ( isset ( $_GET['whichpage'] ) && $_GET['whichpage'] = $i 
Pero así nunca lo he visto, no. Y tal vez no sea tan raro que funcione, porque si comparas algo con TRUE, siempre va a ser TRUE.
  #11 (permalink)  
Antiguo 12/08/2007, 21:50
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Re: No compredo por qué funciona el siguiente código

Esta bien tu codigo Bonez pero se te olvida que para comparar en un if debes de usar 2 == :

Código PHP:
if ( isset ( $_GET['whichpage'] ) && $_GET['whichpage'] == $i 
Saludos.
  #12 (permalink)  
Antiguo 12/08/2007, 22:27
 
Fecha de Ingreso: agosto-2007
Mensajes: 9
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: No compredo por qué funciona el siguiente código

Cita:
Iniciado por Bonez Ver Mensaje
Y tal vez no sea tan raro que funcione, porque si comparas algo con TRUE, siempre va a ser TRUE.
¡¡Precisamente!!!! lo que me trae de cabeza es que no siempre es TRUE !!!!!!!

He ejecutado el código y si $_GET['whichpage'] no es igual a $i toda la expresion if(isset($_GET['whichpage'])) es falsa. ¿COMO ES POSIBLE?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:06.