PHP: Есть ли разница между {$ foo} и ${foo}
Иногда вам нужно разъяснять PHP, что на самом деле является именем переменной. Я обнаружил, что мы с коллегой делали это несколько иначе.
Предположим, что у вас есть переменная $foo
и вы хотите вывести ее с добавлением _constant_string
Я использовал
return "<input type='hidden' name='${foo}_constant_string' value='true' />";
тогда как мой коллега использует
return "<input type='hidden' name='{$foo}_constant_string' value='true' />";
(слегка надуманный пример, чтобы упростить его).
Мои быстрые тесты не показывают явной разницы, но мне любопытно: есть ли разница? Есть ли причина предпочесть друг другу?
Изменить:
Мой пример выше использовал строки, но мой вопрос был более общим - я должен был прямо сказать это. Я знал, что вы можете использовать фигурные скобки для ускользания, но не нашли конкретной точки, если бы были (в любых ситуациях) различия между двумя способами их использования. Я получил ответ: для строк не существует (что такое "дублирующее" сообщение), но для массивов и объектов (спасибо @dragoste).
Ответы
Ответ 1
Кажется, нет никакой разницы в какой-либо версии PHP
$foo = 'test';
var_dump("$foo");
var_dump("{$foo}");
var_dump("${foo}");
Тест: https://3v4l.org/vMO2D
В любом случае, я предпочитаю "{$foo}"
, так как я считаю его более читаемым и работает во многих других случаях, когда другого синтаксиса нет.
В качестве примера попробуйте использовать свойство объекта:
var_dump("$foo->bar"); //syntax error
var_dump("{$foo->bar}"); // works great
var_dump("${foo->bar}"); //syntax error
В том же случае используются массивы.
http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing.complex
Ответ 2
Нет, нет разницы.
// Works, outputs: This is fantastic
echo "This is {$great}";
echo "This is ${great}";
Руководство Php
fooobar.com/questions/60289/...
Другой способ использовать его для переменной:
$foo = 'test';
$test = 'foo';
var_dump("{${$foo}}"); //string(3) "test"
Или для массива:
$foo = ['foo','test'];
var_dump("{$foo[0]}"); //string(3) "foo"
var_dump("${foo[1]}"); //string(3) "test"
Ответ 3
Нет никакой разницы между следующим утверждением -
echo "This is {$great}";
echo "This is ${great}";
Вывод обоих операторов будет таким же. Пожалуйста, проверьте следующий пример -
$great = 'answer';
echo "This is {$great}"."\n";
echo "This is ${great}";
Output:-
This is answer
This is answer