PHP фигурные скобки в записи массива - PullRequest
30 голосов
/ 11 ноября 2011

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

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

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

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

Ответы [ 3 ]

30 голосов
/ 07 ноября 2014

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

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

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

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

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

4 голосов
/ 11 ноября 2011

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

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

3 голосов
/ 11 ноября 2011

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

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

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

...