PHP фигурные скобки в массиве обозначений

Я только что наткнулся на очень странный кусочек PHP-кода:

$oink{'pig'} = 1;
var_dump($oink);

$oink{'pig'} = '123123';
echo $oink{'pig'}; /* => 123123 */
echo $oink['pig']; /* => 123123 */

Он работает как массив, но нигде не упоминается в руководстве. Что это?

3 ответа

Это упоминается в руководстве. {} это просто альтернативный синтаксис [] §:

Как квадратные скобки, так и фигурные скобки могут использоваться взаимозаменяемо для доступа к элементам массива (например, $array[42] а также $array{42} оба будут делать то же самое в примере выше).

То же самое касается строк §:

К символам в строках можно получить доступ и изменить их, указав смещение нуля нужного символа после строки с использованием квадратных скобок массива, как в $str[42], Думайте о строке как о массиве символов для этой цели. [...]

Примечание: строки также могут быть доступны с помощью фигурных скобок, как в $str{42} для той же цели.

Фигурные скобки в PHP 7.4 не рекомендуются для доступа к массивам.

https://wiki.php.net/rfc/deprecate_curly_braces_array_access

Согласно этому комментарию к документации, это просто еще одна нотация, вероятно, разработанная для того, чтобы напоминать синтаксис Perl: http://www.php.net/manual/de/language.types.array.php

Обновление: Когда этот ответ был первоначально опубликован, в руководстве по PHP не было никакой официальной информации по этой нотации. К 2014 году, однако, упомянутый выше комментарий был удален, и, как говорится в ответе Пейсер, нотация была официально упомянута в руководстве.

Это упоминается в руководстве, но неясно:

http://www.php.net/manual/en/language.types.string.php

В двух словах, фигурные скобки имеют доступ только к одному символу (попробуйте добавить полную строку, и вы увидите, что она возвращает только первый символ). Это также устарело, поэтому я бы избегал его использования.

Массив и строка доступ скомпенсирован с помощью фигурных скобок являются официально устаревшим из PHP7.4Ref: https://www.php.net/manual/en/migration74.deprecated.php

Другие вопросы по тегам