#php #string #variables #substitution
#php #строка #переменные #замена
Вопрос:
Я хотел бы знать, когда и почему я должен использовать {$ var}
echo "This is a test using {$var}";
и когда (и почему) я должен использовать простую форму $var
echo "This is a test using $var";
Комментарии:
1. Страница руководства по PHP
2. Я использую {} как можно чаще внутри строк
Ответ №1:
Последнее следует использовать, когда а) нет доступа к объекту или массиву для получения значения и б) после имени переменной нет символов, которые могли бы быть интерпретированы как ее часть.
Ответ №2:
http://php.net/manual/en/language.variables.variable.php
Чтобы использовать переменные variable с массивами, вы должны решить проблему неоднозначности. То есть, если вы пишете $$ a [1], то синтаксическому анализатору нужно знать, имели ли вы в виду использовать $ a [1] в качестве переменной, или если вы хотели $ $ a в качестве переменной, а затем индекс [1] из этой переменной. Синтаксис для разрешения этой неоднозначности таков: $ {$a[1]} для первого случая и $ {$a}[1] для второго.
Ответ №3:
Скобки позволяют устранить неоднозначность для анализатора PHP в некоторых особых случаях. В вашем случае они эквивалентны.
Но рассмотрим этот:
$foobar = 'hello';
$foo = 'foo';
echo "${$foo . 'bar'}"; // hello
Без скобок вы не получите ожидаемого результата:
echo "$$foo . 'bar'"; // $foo . 'bar'
Однако в целях наглядности я бы настоятельно не рекомендовал использовать этот синтаксис.
Ответ №4:
Если вы напишете
echo "This is a test using $vars"
Вы не получаете содержимое $ var в тексте результата.
Если вы напишете
echo "This is a test using {$var}s";
Все будет хорошо.
P.S. Это работает только с «», но не для «.
Комментарии:
1. Если $ var =»bla» выведет «Это тест с использованием blas», поэтому я думаю, что вы ошибаетесь.
2. @sica07 Здесь $vars в первом случае не определен, поэтому он выдаст уведомление PHP: Неопределенная переменная: vars . Но если вы определили, это будет повторяться как его в двойных кавычках. {$var}-ы удостоверяются, что $ var определен , например, разделяют переменную и строку, которые необходимо объединить.
Ответ №5:
{}
Обозначение также полезно для встраивания многомерных массивов в строки.
например
$array[1][2] = "square";
$text = "This $array[1][2] has two dimensions";
будет проанализирован как
$text = "This " . $array[1] . "[2] has two dimensions";
и в итоге вы получите текст
This Array[2] has two dimensions
Но если вы делаете
$text = "This {$array[1][2]} has two dimensions";
в итоге вы получаете ожидаемое
This square has two dimensions.