interpolacion php associative-array

php - interpolacion de variables



InterpolaciĆ³n(cadena entre comillas dobles) de matrices asociativas en PHP (4)

Al interpolar elementos de matriz indexados por cadenas de PHP (5.3.3, Win32), se puede esperar o no el siguiente comportamiento:

$ha = array(''key1'' => ''Hello to me''); print $ha[''key1'']; # correct (usual way) print $ha[key1]; # Warning, works (use of undefined constant) print "He said {$ha[''key1'']}"; # correct (usual way) print "He said {$ha[key1]}"; # Warning, works (use of undefined constant) print "He said $ha[''key1'']"; # Error, unexpected T_ENCAPSED_AND_WHITESPACE print "He said $ha[ key1 ]"; # Error, unexpected T_ENCAPSED_AND_WHITESPACE print "He said $ha[key1]"; # !! correct (How Comes?)

Inecesantemente, la última línea parece ser el código PHP correcto . Alguna explicacion? ¿Se puede confiar en esta característica?

Editar: El objetivo de la publicación ahora se establece en negrita para reducir los malentendidos.

El último es un caso especial manejado por el tokenizer de PHP. No busca si se definió alguna constante con ese nombre, siempre asume un literal de cadena para compatibilidad con PHP3 y PHP4.


Para responder a tu pregunta, sí, sí puede, y como implode y explota, php es muy indulgente ... así que la incoherencia abunda

Y tengo que decir que me gusta la interpolación de PHP para las variables de perforación margarita básica en cadenas allí y allá,

Sin embargo, si solo hace interpolación de cadenas de variables utilizando objetos de una sola matriz, puede ser más fácil escribir una plantilla en la que pueda imprimir variables de objetos específicos (como en javascript o python) y por lo tanto controlar explícitamente el alcance y el objeto de la variable siendo aplicado a la cuerda

Pensé que isprintf de este tipo es realmente útil para este tipo de cosas

http://www.frenck.nl/2013/06/string-interpolation-in-php.html

<?php $values = array( ''who'' => ''me honey and me'', ''where'' => ''Underneath the mango tree'', ''what'' => ''moon'', ); echo isprintf(''%(where)s, %(who)s can watch for the %(what)s'', $values); // Outputs: Underneath the mango tree, me honey and me can watch for the moon


Sí, este es un comportamiento bien definido, y siempre buscará la ''key'' cadena, y no el valor de la key constante (potencialmente indefinida).

Por ejemplo, considere el siguiente código:

$arr = array(''key'' => ''val''); define(''key'', ''defined constant''); echo "/$arr[key] within string is: $arr[key]";

Esto dará como resultado lo siguiente:

$arr[key] within string is: val

Dicho esto, probablemente no sea una buena práctica escribir código como este y, en su lugar, utilizar:

$string = "foo {$arr[''key'']}"

o

$string = ''foo '' . $arr[''key'']

sintaxis.