Mezclando una variable PHP con un literal de cadena

140

Digamos que tengo una variable $testy se define como:$test = 'cheese'

Quiero generar cheesey, lo que puedo hacer así:

echo $test . 'y'

Pero preferiría simplificar el código a algo más como esto (que no funcionaría):

echo "$testy"

¿Hay alguna manera de que yse trate como si estuviera separado de la variable?

Matt McDonald
fuente
1
por $test = cheese;que quería decir $test = 'cheese'; al final de su post (si no estoy equivocado) ...
Outcast

Respuestas:

242
echo "{$test}y";

Puede usar llaves para eliminar la ambigüedad al interpolar variables directamente en cadenas.

Además, esto no funciona con comillas simples. Entonces:

echo '{$test}y';

saldrá

{$test}y
alex
fuente
1
¿También es posible alinear llamadas de función con tal método? Algo similar a"foo{implode(',', [abc])}bar"
velop
@velop Nope. La creación de cadenas a menudo se realiza después de que se haya producido el procesamiento. Llamar a las funciones en medio de la preparación de su salida a menudo no es lo que desea. Considere llamar primero a la función, almacenar el resultado en una variable y luego puede incluirlo en la cadena echo "like so: $var";.
Jochem Kuijpers
¿Cómo incrustar un operador ternario que evalúa dos cadenas de diferencia en una cadena?
oldboy
50

Puede usar {}alrededor de su variable, para separarla de lo que está después:

echo "{$test}y"

Como referencia, puede consultar la sección Análisis sintáctico variable - Sintaxis compleja (rizada) del manual de PHP.

Pascal MARTIN
fuente
Gracias. Traté de leer el manual de cadenas pero no estaba seguro exactamente de lo que estaba buscando para buscar lo que buscaba.
Matt McDonald
2
De nada :-) Sí, no siempre es fácil encontrar la sección correcta, cuando realmente no sabes lo que estás buscando ^^
Pascal MARTIN
Vale la pena señalar que una vez que esté dentro de {}, puede usar expresiones, no solo nombres de variables, como {$ x-> y [3]} o lo que sea.
TextGeek
3

Ejemplo:

$test = "chees";
"${test}y";

Producirá:

caseoso

Es exactamente lo que estás buscando.

Rizwan
fuente
-3
$bucket = '$node->' . $fieldname . "['und'][0]['value'] = " . '$form_state' . "['values']['" . $fieldname . "']";

print $bucket;

rendimientos:

$node->mindd_2_study_status['und'][0]['value'] = $form_state['values']
['mindd_2_study_status']
Earlyburg
fuente