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álido, y devuelve error de sintaxis
Un saludo,