Использовать кавычки в массиве или нет
Пример 1 -
$products = $this->parse("get_products_by_supplier/$data[supplier_id]?quantity=$data[quantity]");
Пример - 2
$products = $this->parse("get_products_by_supplier/ " . $data['supplier_id'] . "?quantity=" . $data['quantity']);
Друзья доброго времени суток, вопрос вот в чем. Правильно использовать $data[supplier_id] без кавычек как в примере номер 1 или нужно только как в примере 2.
Два варианта работают
Заранее спасибо за помощь.
Ответы (1 шт):
Если бы PHP только мог похвалиться консистентным поведением...
const SOMEKEY = 'foo';
error_reporting(E_ALL);
$array = [
'foo' => 'foo',
'SOMEKEY' => 'bar',
];
var_dump("line 1: " . $array['SOMEKEY']);
var_dump("line 2: " . $array[SOMEKEY]);
var_dump("line 3: $array[SOMEKEY]");
var_dump("line 4: ${array[SOMEKEY]}");
var_dump("line 5: ${array['SOMEKEY']}");
Угадаете что произойдёт?
string(11) "line 1: bar"
string(11) "line 2: foo"
string(11) "line 3: bar"
string(11) "line 4: foo"
string(11) "line 5: bar"
В simple syntax парсера переменных в строках нет обращения к константе, в отличии от Complex (curly) syntax (или обычного обращения к переменной, не встроенной в строку). В кавычки же в simple syntax ключ массива взять вовсе невозможно - это синтаксическая ошибка.
Оба ваших примера делают одно и то же. Но, как видно даже здесь же по комментариям, вариант "$array[SOMEKEY]" часто воспринимается ошибочным и чаще встречается конкатенация.