Ver Mensaje Individual
  #110 (permalink)  
Antiguo 26/12/2010, 18:37
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Juego: "¿Dónde está el error?"

Pues sí, ambos tienen toda la razón. Un string siempre equivale a 0 al convertirlo a entero, a menos que el string empiece con dígitos, en cuyo caso éstos son los que le dan el valor al entero final. Como bien hicieron notar portalmana y David, el texto "CUALQUIER TEXTO..." usado para redefinir $foo era clave, pues al solicitar $foo['tercera'] en realidad se estaba solicitando $foo[0], y esto hace referencia al primer caracter que era en este caso una C, por lo que daba la falsa impresión que el resultado era el mismo.

Ahora, otra cosa que quería que se note con este tiro, es que $GLOBALS es una matriz que engloba y hace referencia a TODAS las variables del script, y por ende al decir todas, se entiende que se hace referencia a sí misma. Por lo tanto, es igual decir $foo que $GLOBALS['foo'], que $GLOBALS['GLOBALS']['foo'] o $GLOBALS['GLOBALS']['GLOBALS']['GLOBALS'] ...... ['GLOBALS']['foo']. Además, es una variable superglobal que no necesita de la palabra clave global dentro de una función para estar disponible.

Finalmente, ya que no lo dijeron. La solución para evitar este tipo de confusiones es revisar también el tipo de variable que estamos evaluando con isset(), o en su defecto, al tratarse en este caso e arrays, usar la función que está destinada a ello:

Código PHP:
isset($arreglo['indice']) // <-- Incorrecto
is_array($arreglo) and isset($arreglo['indice']) // <-- Correcto
array_key_exists('indice'$arreglo// <-- Correcto 
En fin, perdón por extenderme, pero creo que se debe sacarle hasta la última gota a todos los tiros que se publiquen aquí.

El turno va entonces para portalmana