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?