Na verdade, tenho um caso de uso válido para isso.
Eu tenho uma função cacheVariable ($ var) (ok, eu tenho uma função de cache ($ key, $ value), mas eu gostaria de ter uma função conforme mencionado).
O objetivo é fazer:
$colour = 'blue';
cacheVariable($colour);
...
// another session
...
$myColour = getCachedVariable('colour');
Eu tentei com
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
}
Eu também tentei com
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));
}
Mas isso também falha ... :(
Claro, eu poderia continuar fazendo cache ('color', $ color), mas sou preguiçoso, você sabe ...;)
Então, o que eu quero é uma função que obtém o nome ORIGINAL de uma variável, pois foi passada para uma função. Dentro da função, não há como saber disso, ao que parece. Passar get_defined_vars () por referência no segundo exemplo acima me ajudou (obrigado a Jean-Jacques Guegan por essa ideia). A última função começou a funcionar, mas ainda continuava retornando a variável local ('variável', não 'cor').
Ainda não tentei usar get_func_args () e get_func_arg (), $ {} - constructos e key () combinados, mas presumo que ele também falhará.