可能重复:
PHP: Get name of variable passed as argument
How to get a variable name as a string in PHP?
如果我有
$abc = '123';
function write($var){
}
我如何在write
内发现现在由$var
代表的变量被称为$abc
?
答案 0 :(得分:7)
这是不可能的。即使是通过引用也无济于事。你必须将这个名字作为第二个参数传递。
但你提出的问题肯定是不是解决问题的好方法。
答案 1 :(得分:3)
您无法获取变量名称,但如果您想要它进行调试,那么您可以使用PHP的内置debug_backtrace()
,我也建议您查看Xdebug。< / p>
使用此功能,您可以获取调用者的一些数据,包括文件和行号,这样您就可以在运行脚本后手动查找该行:
function debug_caller_data()
{
$backtrace = debug_backtrace();
if (count($backtrace) > 2)
return $backtrace[count($backtrace)-2];
elseif (count($backtrace) > 1)
return $backtrace[count($backtrace)-1];
else
return false;
}
完整示例:
<?php
function debug_caller_data()
{
$backtrace = debug_backtrace();
if (count($backtrace) > 2)
return $backtrace[count($backtrace)-2];
elseif (count($backtrace) > 1)
return $backtrace[count($backtrace)-1];
else
return false;
}
function write($var)
{
var_dump(debug_caller_data());
}
function caller_function()
{
$abc = '123';
write($abc);
}
$abc = '123';
write($abc);
caller_function();
答案 2 :(得分:1)
这个答案做了一些假设:
请注意,该函数使用引用传递。我假设有必要对对象进行精确比较。
function write(&$var)
{
$varname = null;
foreach ($GLOBALS as $name => $val)
{
if ($val === $var)
{
$varname = $name;
break;
}
}
}
您是否需要var的名称?可能有更好的解决方案。
†强调假设#3
答案 3 :(得分:1)
当然,如果没有为它创建PHP扩展,这是不可能的。
你当然不想依赖它,特别是在一个函数中。函数不应该在其自己的范围之外操作(全局变量除外,但我讨厌它们)。