Aslında bunun için geçerli bir kullanım durumum var.
Bir işlev cacheVariable ($ var) var (Tamam, bir işlev önbelleği var ($ anahtar, $ değeri), ama belirtildiği gibi bir işlevi var istiyorum).
Amaç:
$colour = 'blue';
cacheVariable($colour);
...
// another session
...
$myColour = getCachedVariable('colour');
İle denedim
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
}
Ben de denedim
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));
}
Ama bu da başarısız oluyor ... :(
Tabii, önbellek yapmaya devam edebilirim ('renk', $ renk), ama tembelim, biliyorsun ...;)
Yani, istediğim bir işleve geçirildiği gibi bir değişken ORİJİNAL adını alır bir işlevdir. Fonksiyonun içinde göründüğü gibi bilmem mümkün değil. Yukarıdaki ikinci örnekte referans olarak get_defined_vars () iletmek bana yardımcı oldu (bu fikir için Jean-Jacques Guegan'a teşekkürler). İkinci işlev çalışmaya başladı, ancak yine de yalnızca yerel değişkeni döndürmeye devam etti ('renk' değil, 'değişken').
Ben get_func_args () ve get_func_arg (), $ {} - yapıları ve key () kombine kullanmak için henüz denemedim, ama aynı zamanda başarısız olacağını varsayıyorum.