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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage