J'ai en fait un cas d'utilisation valide pour cela.
J'ai une fonction cacheVariable ($ var) (ok, j'ai un cache de fonction ($ key, $ value), mais j'aimerais avoir une fonction comme mentionné).
Le but est de faire:
$colour = 'blue';
cacheVariable($colour);
...
// another session
...
$myColour = getCachedVariable('colour');
J'ai essayé avec
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
}
J'ai aussi essayé avec
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));
}
Mais cela échoue aussi ... :(
Bien sûr, je pourrais continuer à faire du cache ('color', $ color), mais je suis paresseux, vous savez ...;)
Donc, ce que je veux, c'est une fonction qui obtient le nom ORIGINAL d'une variable, car il a été passé à une fonction. À l'intérieur de la fonction, il n'y a aucun moyen que je puisse savoir cela, comme il semble. Passer get_defined_vars () par référence dans le deuxième exemple ci-dessus m'a un peu aidé (Merci à Jean-Jacques Guegan pour cette idée). Cette dernière fonction a commencé à fonctionner, mais elle n'a continué à renvoyer que la variable locale ('variable', pas 'color').
Je n'ai pas encore essayé d'utiliser get_func_args () et get_func_arg (), $ {} - constructions et key () combinées, mais je suppose que cela échouera également.