Ich habe tatsächlich einen gültigen Anwendungsfall dafür.
Ich habe eine Funktion cacheVariable ($ var) (ok, ich habe einen Funktionscache ($ key, $ value), aber ich möchte eine Funktion wie erwähnt haben).
Der Zweck ist zu tun:
$colour = 'blue';
cacheVariable($colour);
...
// another session
...
$myColour = getCachedVariable('colour');
Ich habe es mit versucht
function cacheVariable($variable) {
$key = ${$variable}; // This doesn't help! It only gives 'variable'.
// do some caching using suitable backend such as apc, memcache or ramdisk
}
Ich habe es auch mit versucht
function varName(&$var) {
$definedVariables = get_defined_vars();
$copyOfDefinedVariables = array();
foreach ($definedVariables as $variable=>$value) {
$copyOfDefinedVariables[$variable] = $value;
}
$oldVar = $var;
$var = !$var;
$difference = array_diff_assoc($definedVariables, $copyOfDefinedVariables);
$var = $oldVar;
return key(array_slice($difference, 0, 1, true));
}
Aber das scheitert auch ... :(
Sicher, ich könnte weiterhin Cache machen ('Farbe', $ Farbe), aber ich bin faul, weißt du ...;)
Ich möchte also eine Funktion, die den ORIGINAL-Namen einer Variablen erhält, wie er an eine Funktion übergeben wurde. Innerhalb der Funktion kann ich das auf keinen Fall wissen, wie es scheint. Das Übergeben von get_defined_vars () als Referenz im zweiten Beispiel oben hat mir etwas geholfen (Dank an Jean-Jacques Guegan für diese Idee). Die letztere Funktion begann zu funktionieren, gab aber immer noch nur die lokale Variable zurück ('Variable', nicht 'Farbe').
Ich habe noch nicht versucht, get_func_args () und get_func_arg (), $ {} - Konstrukte und key () zusammen zu verwenden, aber ich gehe davon aus, dass dies ebenfalls fehlschlagen wird.