2016-05-13 2 views
10

Иногда вам нужно разъяснить 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).

+0

Интересно, почему вопрос заключается помечены как дублированные. Может быть, этот парень не читал титул. – revo

ответ

7

кажется , Нет никакой разницы в любом PHP версии

$foo = 'test';  
    var_dump("$foo"); 
    var_dump("{$foo}"); 
    var_dump("${foo}"); 

Тест: https://3v4l.org/vMO2D

Во всяком случае я предпочитаю "{$foo}", так как я считаю, что это более читаемыми и работает во многих других случаях, когда другой синтаксис не.

В качестве примера давайте попробуем с объектом недвижимости ACCESSING:

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

7

Нет, нет отличий.

// Works, outputs: This is fantastic 
echo "This is {$great}"; 
echo "This is ${great}"; 

Php manual

Answer on stackoverflow

Другой способ использовать его для переменной:

$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" 
0

Там нет никакой разницы между следующим утверждением -

echo "This is {$great}"; 
echo "This is ${great}"; 

Выход обоих заявлений будет same.Please проверку следующих ПРИМЕР-

$great = 'answer'; 
echo "This is {$great}"."\n"; 
echo "This is ${great}"; 

Output:- 

This is answer 
This is answer