Mieszanie zmiennej PHP z literałem łańcuchowym

140

Powiedzmy, że mam zmienną $testi jest ona zdefiniowana jako:$test = 'cheese'

Chcę wydrukować cheesey, co mogę zrobić w ten sposób:

echo $test . 'y'

Ale wolałbym uprościć kod do czegoś bardziej podobnego (co nie zadziała):

echo "$testy"

Czy istnieje sposób, aby ytraktować to tak, jakby było oddzielone od zmiennej?

Matt McDonald
źródło
1
przez $test = cheese;ciebie miałeś na myśli $test = 'cheese'; na końcu twój post (jeśli się nie mylę) ...
Outcast

Odpowiedzi:

242
echo "{$test}y";

Możesz użyć nawiasów klamrowych, aby usunąć niejednoznaczność podczas interpolacji zmiennych bezpośrednio w łańcuchach.

Nie działa to również w przypadku pojedynczych cudzysłowów. Więc:

echo '{$test}y';

wyjdzie

{$test}y
Alex
źródło
1
czy możliwe jest również wbudowane wywołania funkcji za pomocą takiej metody? Coś podobnego do"foo{implode(',', [abc])}bar"
velop
@velop Nope. Tworzenie ciągów jest często wykonywane po zakończeniu przetwarzania. Wywoływanie funkcji w trakcie przygotowywania wyjścia często nie jest tym, czego chcesz. Rozważ najpierw wywołanie funkcji, zapisanie wyniku w zmiennej, a następnie dodanie jej do ciągu echo "like so: $var";.
Jochem Kuijpers,
jak osadzić operator trójargumentowy, którego wynikiem są dwa ciągi różnicowe w ciągu?
oldboy
50

Możesz użyć {}otaczania swojej zmiennej, aby oddzielić ją od tego, co jest po:

echo "{$test}y"

Jako odniesienie, możesz rzucić okiem na sekcję Analiza zmiennych - Złożona (kędzierzawa) składnia w podręczniku PHP.

Pascal MARTIN
źródło
Dzięki. Próbowałem przeczytać instrukcję dotyczącą strun, ale nie byłem pewien, czego dokładnie szukam, aby znaleźć to, czego szukam.
Matt McDonald
2
Nie ma za co :-) Tak, nie zawsze łatwo jest znaleźć właściwą sekcję, kiedy tak naprawdę nie wiesz, czego szukasz ^^
Pascal MARTIN
Warto zauważyć, że gdy znajdziesz się wewnątrz {}, możesz używać wyrażeń, a nie tylko nazw zmiennych, takich jak {$ x-> y [3]} lub cokolwiek innego.
TextGeek
3

Przykład:

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

Wyświetli:

serowy

To jest dokładnie to, czego szukasz.

Rizwan
źródło
-3
$bucket = '$node->' . $fieldname . "['und'][0]['value'] = " . '$form_state' . "['values']['" . $fieldname . "']";

print $bucket;

plony:

$node->mindd_2_study_status['und'][0]['value'] = $form_state['values']
['mindd_2_study_status']
Earlyburg
źródło