Ver Mensaje Individual
  #9 (permalink)  
Antiguo 14/01/2008, 16:30
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: simplificar codigo ( de nuevo :P)

Si se coloca un string sin comillas PHP lo interpreta primero como si fuera una constante, y si no hay ninguna constante con ese nombre, PHP asume que se trata entonces de una cadena de texto no encapsulada. Eso es una causa muy común de error. Sin embargo no todo es lo que parece. Veamos un ejemplos con varios casos:

Código PHP:
define('palabra','constante');
 
$array['palabra'] = 'NO CONSTANTE';
$array['constante'] = 'CONSTANTE'
Ahora, si yo pongo:
Código PHP:
echo "Esto es de tipo ".$array[palabra]; 
Se imprime Esto es de tipo CONSTANTE, debido a que palabra es interpretado como una constante y reemplazado por su valor, por lo que en realidad estamos referenciando a $array['constante'];

Si coloco
Código PHP:
echo "Esto es de tipo ".$array['palabra']; 
Se imprime Esto es de tipo NO CONSTANTE, debido a que palabra es interpretado como un índice y reemplazado por su valor correspondiente dentro del array.

En caso de
Código PHP:
echo "Esto es de tipo $array[palabra]"
Imprime: Esto es de tipo NO CONSTANTE. Al estar toda la cadena entre comillas, no es necesario indicar que al poner palabra estamos haciendo referencia a un indice del array, y no a una constante

Esto
Código PHP:
echo "Esto es de tipo $array['palabra']"
Esto devuelve un error de sintaxis, ya que no es la forma de insertar un elemento de un array en un string directamente. Para eso se usa {}:

Pero si pongo esto:
Código PHP:
echo "Esto es de tipo {$array['palabra']}"
Ahora si, se imprime: Esto es de tipo NO CONSTANTE. PHP interpreta lo que está entre llaves {} como si estuviera fuera de la cadena. palabra es tomada como un índice.

Finalmente,
Código PHP:
echo "Esto es de tipo {$array[palabra]}"
Aquí, palabra es tomada como si fuera una constante, ya que se encuentra entre llaves, por lo que se imprime: Esto es de tipo CONSTANTE.

En resumen:

Código PHP:
 
$array
[palabra] = "{$array[palabra]}" "Esto es de tipo CONSTANTE"
$array['palabra'] = "$array[palabra]" "{$array['palabra']}" "Esto es de tipo NO CONSTANTE"
 
"$array['palabra']" 
No es válidoy devuelve error de sintaxis 
Un saludo,

Última edición por okram; 07/10/2008 a las 10:03