1unitedpower: PHP: Variablennamen erzeugen?

Beitrag lesen

An der mit "PROBLEM" markierten Stelle greifst du aus der Funktion heraus auf globale Variablen zu. Das geht aber nicht so ohne weiteres; du müsstest sie eigentlich zu Beginn der Funktion mit dem Schlüsselwort global bekanntmachen, sozusagen in die Funktion importieren. Das geht aber auch nicht, wenn du ihre Namen nicht kennst.

Etwas allgemeiner ausgedrückt versucht er an der Stelle auf eine Variable des umschließenden Geltungsbereichs zuzugreifen, das muss nicht unbedingt auch der globale Geltungsbereich sein. Für den allgemeineren Fall kann man Variablen mit der use-Klausel von den äußeren in den inneren Geltungsbereich importieren:

$foo = 42;
function bar () use ($foo) {
   return $foo;
}
bar(); // 42

Für die Funktion bar behält der PHP-Jit-Compiler nun eine Referenz auf die Variable $foo. Das ist wichtig, weil sonst die Garbage-Collection die Variable aufräumen könnte und die Funktion damit undefiniert wäre. Das ist das Konzept eines Closures. Würde man VVs in dem Closure zulassen, müsste PHP für jede Variable des äußeren Scopes eine Referenz verwalten und die Garbage-Collection wäre gelähmt - das wäre ziemlich blöd.