Я просто натолкнулся на очень странный бит php-кода:
$oink{'pig'} = 1; var_dump($oink); $oink{'pig'} = '123123'; echo $oink{'pig'}; /* => 123123 */ echo $oink['pig']; /* => 123123 */
Он работает как массив, но нигде не упоминается в руководстве. Что это?
Это указано в руководстве. {}
является просто альтернативным синтаксисом для []
§ :
Как квадратные скобки, так и фигурные скобки могут использоваться взаимозаменяемо для доступа к элементам массива (например,
$array[42]
и$array{42}
будут делать то же самое в примере выше).
То же самое относится к строкам § :
Символы внутри строк могут быть доступны и изменены, указав нулевое смещение нужного символа после строки, используя квадратные квадратные скобки, как в
$str[42]
. Подумайте о строке как массиве символов для этой цели. […]Примечание. Строки также могут быть доступны с помощью фигурных скобок, как в
$str{42}
, с той же целью .
Согласно этому комментарию к документации, это всего лишь еще одна нотация, вероятно, спроектированная так, чтобы напоминать синтаксис Perl: http://www.php.net/manual/de/language.types.array.php#99015
Обновление. Когда этот ответ был первоначально опубликован, руководство PHP не имело никакой официальной информации об этой нотации. К 2014 году, однако, упомянутый выше комментарий был удален, и, как говорит ответ Пастерье , в руководстве было дано официальное упоминание.
Это упоминается в руководстве, но неясно:
http://www.php.net/manual/en/language.types.string.php#language.types.string.substr
В двух словах фигурные скобки доступны только одному символу (попробуйте добавить полную строку, и вы увидите, что она возвращает только первый символ). Он также устарел, поэтому я бы избегал его использования.