Tôi thực sự có một trường hợp sử dụng hợp lệ cho việc này.
Tôi có chức năng cacheVariable ($ var) (ok, tôi có bộ đệm chức năng ($ key, $ value), nhưng tôi muốn có một chức năng như đã đề cập).
Mục đích là để làm:
$colour = 'blue';
cacheVariable($colour);
...
// another session
...
$myColour = getCachedVariable('colour');
Tôi đã thử với
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
}
Tôi cũng đã thử với
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));
}
Nhưng điều này cũng thất bại ... :(
Chắc chắn, tôi có thể tiếp tục thực hiện bộ đệm ('màu', $ color), nhưng tôi lười, bạn biết đấy ...;)
Vì vậy, điều tôi muốn là một hàm lấy tên ORIGINAL của một biến, vì nó được truyền cho một hàm. Bên trong chức năng không có cách nào tôi có thể biết điều đó, dường như. Việc vượt qua get_dained_vars () bằng cách tham chiếu trong ví dụ thứ hai ở trên đã giúp tôi (Cảm ơn Jean-Jacques Guegan vì ý tưởng đó) phần nào. Hàm sau bắt đầu hoạt động, nhưng nó vẫn chỉ trả về biến cục bộ ('biến', không phải 'màu').
Tôi chưa thử sử dụng get_func_args () và get_func_arg (), $ {} - các cấu trúc và khóa () kết hợp, nhưng tôi cho rằng nó cũng sẽ thất bại.