2015-07-23 2 views
1

Учитывая эту конфигурациюPHP переменная Интерполяция, почему это работает

$names = array('Smith', 'Jones', 'Jackson'); 

Я понимаю, что это работает:

echo "Citation: {$names[1]}[1987]".PHP_EOL; //Citation: Jones[1987] 

PHP через сложный синтаксис с фигурными скобками, тянет значение второго элемента на массиве и [1987] является просто другой текст ...

Но в следующем коде:

echo "Citation: $names[1][1987]".PHP_EOL; 

Я бы ожидать ошибку, я бы ожидать, PHP интерпретирует его как двухмерного массива и выброшен ошибку, но вместо того, чтобы он дал мне тот же вывод, что код выше «Образец цитирования: Jones [1987]»

Почему?

ответ

1

PHP идет здесь для первого появления ], так как у вас есть массив, как вы можете видеть в manual:

Аналогично, индекс массива или свойство объекта может быть разобран. С индексами массива закрывающая квадратная скобка ()) отмечает конец индекса. Те же правила применяются к свойствам объекта, что и для простых переменных.

Это означает, что конец является первым индексом, например.

echo "Citation: $names[1][1987]".PHP_EOL; 
       //^ Start^End 

Таким образом, ваше «второе измерение» просто анализируется как обычная строка. Поэтому для более сложных структур вам необходимо использовать сложный синтаксис для обозначения начала и конца вашей переменной, например.

echo "Citation: {$names[1][1987]}".PHP_EOL; 
       //^ See here ^

Так что это даст вам предупреждение:

Примечание: Uninitialized строка смещения: 1987

+0

Спасибо ... ИМХО он должен сказать:»... с индексами массива, то Первая закрывающая квадратная скобка (]) обозначает конец индекса ... » –

+0

@Richard Добро пожаловать. – Rizier123

Смежные вопросы