PHP "Assign by reference" Seltsamkeit
Ich bin auf ein Code-Snippet gestoßen, das @ enthie$a = & $b;
hatte aber nicht getestet, ob $ b tatsächlich existiert if (isset($b))
). Ich war mir nicht sicher, wie PHP damit umgegangen ist, also habe ich einen kurzen Test gemacht und bin jetzt noch faszinierter.
$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";
Es ist nackter Code, aber die Ausgabe zeigt:
Nur die nackte Zuweisung von$b[11] = &$a['ppp']
reicht,var_dump($a)
s wird berichtet, dass @ 3 Mitglieder hat, nicht 2, obwohl für @ keine Zuordnung vorgenommen wurd$a['ppp']
. $a['ppp']
hat einen Wert NULL
) aber auchisset()=FALSE
.
ittlerweile zur gleichen Zeit,$b[11]
zeigt einen WertNULL
undisset()=FALSE
obwohl sein Referent (anscheinend) does exist (!)
Ich weiß zu schätzen, dass das Überprüfen zuerst das 'Problem' behebt, aber ich suche hauptsächlich nach einem tieferen Verständnis. Was ist los