Mam do tego ważny przypadek użycia.
Mam funkcję cacheVariable ($ var) (ok, mam pamięć podręczną funkcji ($ key, $ value), ale chciałbym mieć funkcję, jak wspomniano).
Celem jest wykonanie:
$colour = 'blue';
cacheVariable($colour);
...
// another session
...
$myColour = getCachedVariable('colour');
Próbowałem z
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
}
Próbowałem też z
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));
}
Ale to też się nie udaje ... :(
Jasne, mógłbym nadal robić pamięć podręczną („kolor”, $ kolor), ale jestem leniwy, wiesz ...;)
Tak więc, czego chcę, to funkcja, która otrzymuje ORYGINALNĄ nazwę zmiennej, tak jak została przekazana do funkcji. Wewnątrz funkcji nie ma możliwości, żeby to wiedzieć, jak się wydaje. Przekazywanie get_defined_vars () przez odniesienie w drugim powyższym przykładzie pomogło mi (dzięki Jean-Jacquesowi Gueganowi za ten pomysł) nieco. Ta ostatnia funkcja zaczęła działać, ale nadal zwracała tylko zmienną lokalną („zmienna”, a nie „kolor”).
Nie próbowałem jeszcze używać get_func_args () i get_func_arg (), $ {} - kombinacje konstrukcji i key (), ale przypuszczam, że to też się nie powiedzie.