De hecho, tengo un caso de uso válido para esto.
Tengo una función cacheVariable ($ var) (ok, tengo una función cache ($ key, $ value), pero me gustaría tener una función como se mencionó).
El propósito es hacer:
$colour = 'blue';
cacheVariable($colour);
...
// another session
...
$myColour = getCachedVariable('colour');
He intentado con
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
}
También he intentado 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));
}
Pero esto también falla ... :(
Claro, podría seguir haciendo caché ('color', $ color), pero soy vago, ya sabes ...;)
Entonces, lo que quiero es una función que obtenga el nombre ORIGINAL de una variable, ya que se pasó a una función. Dentro de la función no hay forma de que pueda saber eso, como parece. Pasar get_defined_vars () por referencia en el segundo ejemplo anterior me ayudó (Gracias a Jean-Jacques Guegan por esa idea) de alguna manera. La última función comenzó a funcionar, pero solo seguía devolviendo la variable local ('variable', no 'color').
Todavía no he intentado usar get_func_args () y get_func_arg (), $ {} - constructos y key () combinados, pero supongo que también fallará.