Saya sebenarnya memiliki kasus penggunaan yang valid untuk ini.
Saya memiliki fungsi cacheVariable ($ var) (ok, saya memiliki fungsi cache ($ key, $ value), tetapi saya ingin memiliki fungsi seperti yang disebutkan).
Tujuannya adalah untuk melakukan:
$colour = 'blue';
cacheVariable($colour);
...
// another session
...
$myColour = getCachedVariable('colour');
Saya sudah mencoba
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
}
Saya juga sudah mencoba
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));
}
Tapi ini juga gagal ... :(
Tentu, saya bisa terus melakukan cache ('warna', $ warna), tapi saya malas, Anda tahu ...;)
Jadi, yang saya inginkan adalah fungsi yang mendapatkan nama ASLI dari variabel, karena diteruskan ke fungsi. Di dalam fungsi itu tidak mungkin saya bisa tahu itu, seperti yang terlihat. Melewati get_defined_vars () dengan referensi dalam contoh kedua di atas membantu saya (Terima kasih kepada Jean-Jacques Guegan untuk ide itu) agak. Fungsi terakhir mulai bekerja, tetapi masih tetap mengembalikan variabel lokal ('variabel', bukan 'warna').
Saya belum mencoba menggunakan get_func_args () dan get_func_arg (), $ {} - konstruk dan key () digabungkan, tetapi saya kira itu akan gagal juga.