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