1. Allgemeines
Es gibt keine vordefinierte Funktion in PHP über die der Name einer Variablen ausgegeben werden kann. Man kann allerdings das Ergebnis von get_defined_vars() zur Hilfe nehmen, welche alle im Geltungsbereich (Scope) definierten Variablen — jeweils inklusive Name und Wert — zurückgibt.
2. Definition einer eigenen Funktion
PHP-Code
<?php // Funktion zum Ermitteln des Namens einer Variable function getVarName(&$var, $definedVars=null) { $definedVars = (!is_array($definedVars) ? $GLOBALS : $definedVars); $val = $var; $rand = 1; while (in_array($rand, $definedVars, true)) { $rand = md5(mt_rand(10000, 1000000)); } $var = $rand; foreach ($definedVars as $dvName=>$dvVal) { if ($dvVal === $rand) { $var = $val; return $dvName; } } return null; } // Drei identische Variablen, // von einer soll der Name ermittelt werden. $a = 1; $b = 1; $c = 1; // Name ermitteln echo getVarName($c); ?>
HTML-Code: Ausgabe
c
Die Funktion getVarName() geht wie folgt vor:
- Die Variable für die der Name ermittelt werden soll wird als Referenz empfangen. Das ist wichtig, da nachfolgend der Wert angepasst werden muss.
- Der alte Wert der Variable wird abgespeichert.
- Der Wert der Variable wird temporär in einen Zufallswert geändert, der noch nicht unter den definierten Variablen vorkommt.
- Unter den definierten Variablen wird nach derjenigen gesucht, die diesen Zufallswert hat.
- Der Wert dieser Variable wird wieder auf den abgespeicherten Wert zurückgestellt.
- Der Name dieser Variable wird zurückgegeben.
3. getVarName() im Geltungsbereich einer Funktion
Im vorherigen Beispiel wurde die Funktion im globalen Geltungsbereich aufgerufen (oberste Ebene). Für diesen Fall muss nicht das Ergebnis von get_defined_vars() mit übergeben werden, die Funktion greift dann automatisch auf $GLOBALS zurück. Ist man allerdings in einer Funktion, dann muss get_defined_vars() ein mal angewendet werden.
PHP-Code
<?php // ... hier Funktion getVarName aus vorherigem Beispiel einfuegen ... function test() { $a = 1; $b = 1; $c = 1; var_dump(getVarName($c)); // bei diesem Aufruf wird $c nicht gefunden var_dump(getVarName($c, get_defined_vars())); // bei diesem wird sie gefunden } test(); ?>
HTML-Code: Ausgabe
NULL string(1) "c"