Обновление автоививификации PHP

Обновление: Моим первоначальным намерением по этому вопросу было определить, действительно ли PHP имеет эту функцию. Это было потеряно в ответах на скалярную проблему. вместо этого задайте вопрос: «Есть ли в PHP автовивификация?» Этот вопрос оставлен здесь для справки.

Согласно Википедии , в PHP нет автовивификации, но этот код работает:

$test['a']['b'] = 1;
$test['a']['c'] = 1;
$test['b']['b'] = 1;
$test['b']['c'] = 1;

var_dump($test);

Вывод :

array
  'a' => 
    array
      'b' => int 1
      'c' => int 1
  'b' => 
    array
      'b' => int 1
      'c' => int 1

Я обнаружил, что этот код тоже работает:

$test['a'][4] = 1;
$test['b'][4]['f'] = 3;

Но добавление этой строки вызывает предупреждение («Предупреждение: нельзя использовать скалярное значение как массив»)

$test['a'][4]['f'] = 3;

What ' здесь происходит? Почему не удается добавить ассоциативный элемент после индекса? Является ли это «истинным» автовивификацией Perl или его разновидностями, или чем-то еще?

Edit: о, теперь я вижу ошибку со скаляром, упс! Они работают, как ожидалось:

$test['a'][4]['a'] = 1;
$test['a'][4]['b'] = 2;
$test['a'][5]['c'] = 3;
$test['a'][8]['d'] = 4;

Итак, у php есть автовивификация? Поиск в Google по запросу "автовивификация php" не дает канонического ответа или его примера.

9
задан Community 23 May 2017 в 12:17
поделиться