Estratificação do PHP "Atribuir por referência"

Me deparei com um trecho de código que incluía$a = & $b; mas não havia testado se $ b realmente existia (if (isset($b))) Eu não tinha certeza de como o PHP lidava com isso, então fiz um teste rápido e agora estou ainda mais intrigado.

$a = array('a'=>'b', 'x'=>'y');

$b = array();

$b[10] = &$a['a'];
$b[11] = &$a['ppp'];

var_dump($a);
var_dump($b);
echo (isset($a['ppp']) ? "SET" :" NOT SET") . "\n";
echo (isset($b[11]) ? "SET" :" NOT SET") . "\n";

É um código simples, mas o que a saída mostra é:

Apenas a simples atribuição de$b[11] = &$a['ppp'] basta,var_dump($a) é relatado como tendo 3 membros e não 2, mesmo que nenhuma atribuição tenha sido feita para$a['ppp']. $a['ppp'] é relatado como tendo um valor (NULL) mas tambémisset()=FALSE.

Enquanto isso, ao mesmo tempo,$b[11] mostra um valorNULL eisset()=FALSE mesmo que seu referente (aparentemente)faz existir (!)

Compreendo que a verificação primeiro corrija o 'problema', mas estou procurando principalmente um entendimento mais profundo. O que está acontecendo?

questionAnswers(2)

yourAnswerToTheQuestion