In realtà ho un caso d'uso valido per questo.
Ho una funzione cacheVariable ($ var) (ok, ho una cache di funzione ($ chiave, $ valore), ma vorrei avere una funzione come menzionato).
Lo scopo è di fare:
$colour = 'blue';
cacheVariable($colour);
...
// another session
...
$myColour = getCachedVariable('colour');
Ci ho provato
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
}
Ho anche provato con
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));
}
Ma anche questo fallisce ... :(
Certo, potrei continuare a fare cache ('color', $ color), ma sono pigro, sai ...;)
Quindi, quello che voglio è una funzione che ottiene il nome ORIGINALE di una variabile, poiché è stata passata a una funzione. All'interno della funzione non c'è modo di saperlo, come sembra. Passare get_defined_vars () come riferimento nel secondo esempio sopra mi ha aiutato (grazie a Jean-Jacques Guegan per quell'idea) in qualche modo. Quest'ultima funzione ha iniziato a funzionare, ma ha continuato a restituire solo la variabile locale ('variabile', non 'colore').
Non ho ancora provato a usare get_func_args () e get_func_arg (), $ {} - costrutti e key () combinati, ma presumo che fallirà anche.