ฉันมีกรณีการใช้งานจริงสำหรับสิ่งนี้
ฉันมีฟังก์ชั่น 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 () โดยการอ้างอิงในตัวอย่างที่สองด้านบนช่วยฉันได้ (ขอบคุณ Jean-Jacques Guegan สำหรับความคิดนั้น) ฟังก์ชันหลังเริ่มทำงาน แต่ก็ยังคงส่งคืนเฉพาะตัวแปรภายในเครื่อง ('ตัวแปร' ไม่ใช่ 'สี')
ฉันยังไม่ได้ลองใช้ get_func_args () และ get_func_arg (), $ {} - โครงสร้างและคีย์ () รวมกัน แต่ฉันคิดว่ามันจะล้มเหลวเช่นกัน