У меня есть действительный вариант использования для этого.
У меня есть функция cacheVariable ($ var) (хорошо, у меня есть кэш функции ($ key, $ value), но я хотел бы иметь функцию, как уже упоминалось).
Цель состоит в том, чтобы сделать:
$colour = 'blue';
cacheVariable($colour);
...
// another session
...
$myColour = getCachedVariable('colour');
Я пробовал с
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
}
Я также пытался с
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));
}
Но и это не помогает ... :(
Конечно, я мог бы продолжать делать кеш ('color', $ color), но я ленивый, вы знаете ...;)
Итак, мне нужна функция, которая получает ОРИГИНАЛЬНОЕ имя переменной, как оно было передано функции. Внутри функции я никак не могу это знать, как кажется. Передача get_defined_vars () по ссылке во втором примере выше мне очень помогла (спасибо Жан-Жаку Гугану за эту идею). Последняя функция начала работать, но она все еще продолжала возвращать локальную переменную («переменная», а не «цвет»).
Я еще не пробовал использовать get_func_args () и get_func_arg (), $ {} - конструкции и key () вместе, но я полагаю, что это тоже не удастся.