PHP autovivification
Update: Minha intenção original para esta pergunta era determinar se o PHP realmente tem esse recurso. Isso foi perdido no foco das respostas na questão escalar. Por favor, veja esta nova pergunta: "O PHP tem autovivificação?" Esta questão é deixada aqui para referência.
De acordo com a Wikipedia, O PHP não tem autovivificação, mas esse código funciona:
$test['a']['b'] = 1;
$test['a']['c'] = 1;
$test['b']['b'] = 1;
$test['b']['c'] = 1;
var_dump($test);
Saída
array
'a' =>
array
'b' => int 1
'c' => int 1
'b' =>
array
'b' => int 1
'c' => int 1
Descobri que esse código também funciona:
$test['a'][4] = 1;
$test['b'][4]['f'] = 3;
Mas adicionar esta linha causa um aviso ("Aviso: não é possível usar um valor escalar como uma matriz")
$test['a'][4]['f'] = 3;
O que está acontecendo aqui? Por que falha quando adiciono o elemento associativo após o índice? Essa é uma autovivificação "verdadeira" do tipo Perl, ou alguma variação dela, ou alguma outra coisa?
Edit: oh, vejo o erro com o escalar agora, oops! Funcionam conforme o esperado:
$test['a'][4]['a'] = 1;
$test['a'][4]['b'] = 2;
$test['a'][5]['c'] = 3;
$test['a'][8]['d'] = 4;
Então, php tem autovivification? A busca no Google por "autovivificação php" não traz uma resposta canônica ou um exemplo disso.