Я фактично маю для цього дійсний випадок використання.
У мене є функція cacheVariable ($ var) (гаразд, у мене є кеш функцій ($ ключ, $ значення), але я хотів би мати функцію, як згадувалося).
Мета:
$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), але я лінивий, ви знаєте ...;)
Отже, я хочу - це функція, яка отримує ORIGINAL ім'я змінної, як вона була передана функції. Всередині функції немає можливості мені знати це, як здається. Передача get_defined_vars () за посиланням у другому прикладі вище допомогла мені (спасибі Жану-Жак Геган за цю ідею) дещо. Остання функція почала працювати, але вона все ще зберігала лише повернення локальної змінної ('змінної', а не 'кольорової').
Я ще не намагався використовувати get_func_args () та get_func_arg (), $ {} - конструкції та ключ () у поєднанні, але я припускаю, що це також вийде з ладу.