Смешивание переменной PHP со строковым литералом

144

Скажем, у меня есть переменная, $testи она определяется как:$test = 'cheese'

Я хочу вывести cheesey, что могу сделать вот так:

echo $test . 'y'

Но я бы предпочел упростить код до чего-то более похожего (что не сработает):

echo "$testy"

Есть ли способ yобработать переменную как отдельную от переменной?

Мэтт Макдональд
источник
1
по $test = cheese;вы имели в виду $test = 'cheese'; в конце вашего поста (если я не ошибаюсь) ...
Изгой

Ответы:

251
echo "{$test}y";

Вы можете использовать фигурные скобки, чтобы устранить двусмысленность при интерполяции переменных непосредственно в строках.

Кроме того, это не работает с одинарными кавычками. Так:

echo '{$test}y';

выведет

{$test}y
Алекс
источник
1
можно ли встроить вызовы функций с помощью такого метода? Нечто подобное"foo{implode(',', [abc])}bar"
ворачиваются
@velop Нет. Построение строк часто выполняется после того, как произошла обработка. Вызов функций в середине подготовки вывода часто бывает не тем, что вам нужно. Подумайте о том, чтобы сначала вызвать функцию, сохранив результат в переменной, а затем вы можете включить его в строку echo "like so: $var";.
Jochem Kuijpers
как встроить тернарный оператор, который оценивает две строки diff в строку?
oldboy
51

Вы можете использовать {}arround свою переменную, чтобы отделить ее от того, что после:

echo "{$test}y"

В качестве справки вы можете взглянуть на раздел Синтаксический анализ переменных - Сложный (фигурный) синтаксис руководства по PHP.

Паскаль МАРТИН
источник
Спасибо. Я попытался прочитать руководство по струнам, но не был уверен, что именно искал, чтобы найти то, что мне нужно.
Мэтт Макдональд,
2
Добро пожаловать :-) Да, не всегда легко найти нужный раздел, когда вы действительно не знаете, что ищете ^^
Паскаль МАРТИН
Стоит отметить, что, оказавшись внутри {}, вы можете использовать выражения, а не только имена переменных, такие как {$ x-> y [3]} или что-то еще.
TextGeek
4

Пример:

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

Он выведет:

дрянной

Это именно то, что вы ищете.

Ризван
источник
-3
$bucket = '$node->' . $fieldname . "['und'][0]['value'] = " . '$form_state' . "['values']['" . $fieldname . "']";

print $bucket;

дает:

$node->mindd_2_study_status['und'][0]['value'] = $form_state['values']
['mindd_2_study_status']
Earlyburg
источник