Использовать кавычки в массиве или нет

Пример 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]" часто воспринимается ошибочным и чаще встречается конкатенация.

→ Ссылка