PHP фигурные скобки в нотации массива

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

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

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

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

Ответ 1

Первое упоминание, которое я могу найти, - это комментарий в руководстве - http://php.net/manual/language.types.array.php#99015

Кажется, это принятие синтаксиса в стиле perl.

Ответ 2

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

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

То же самое относится к строкам & sect;:

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

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

Ответ 3

В соответствии с этим комментарием к документации, это просто еще одно обозначение, вероятно, похожее на синтаксис Perl: http://www.php.net/manual/de/language.types.array.php#99015

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

Ответ 4

Это указано в руководстве, но это неясно:

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

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