Я смутно вспоминаю из первых чтений PHP-документов (более 10 лет назад), что синтаксис типа массива для доступа к символам в массивах ($string[0]
) создает некоторую неопределенность или неопределенное поведение.string - неоднозначность массива в PHP
O'Reilly PHP Карманный справочник (2-й изд) гласит:
Чтобы решить проблему неоднозначности между строками и массивами, нового синтаксис был введен разыменовать отдельные символы из строк:
$string{2}
Этот синтаксис эквивалентен
$string[2]
и является предпочтительным.
Я понимаю, что $string[2]
может быть запутанным, но я не уверен, как он может быть неоднозначным?
Кроме того: Интересно, как the new syntax$string{2}
устраняет неоднозначность/путаницы, принимая во внимание, что фигурные скобки (apparently) также работают на «реальных» массивов.
Я не уверен, правильно ли я это понимаю, но я не вижу здесь проблемы, так как $ string {2} (или $ string [2]) используется либо с точки зрения того, что это строка, выберите 2-го символа или с точки зрения массива, отыщите второй элемент, который в основном является тем же самым для интерпретатора, поскольку строка является просто массивом для интерпретатора. – Garuda
Последняя версия php получает странный '$ str = 'hi'; echo $ str [0] [0] [0] [0] [0] [0] [0]; // выводит h', просто рекурсивно делает substr для первого char – goat