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.
Sí, puedes confiar en eso. Todas las formas de interpolación de una variable están cubiertas en la documentación bastante bien.
Si quieres tener una razón por la que esto se hizo así, bueno, no puedo ayudarte allí. Pero como siempre: PHP es viejo y ha evolucionado mucho, introduciendo una sintaxis inconsistente.