原始变量名传递给函数?

时间:2010-12-21 20:10:35

标签: php variables

  

可能重复:
  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

4 个答案:

答案 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)

这个答案做了一些假设:

  1. 它有效(我还没有测试过)
  2. 传递全局声明的变量
  3. 传递的变量是唯一的或对象
  4. 请注意,该函数使用引用传递。我假设有必要对对象进行精确比较。

    function write(&$var)
    {
      $varname = null;
      foreach ($GLOBALS as $name => $val)
      {
        if ($val === $var)
        {
          $varname = $name;
          break;
        }
      }
    }
    

    您是否需要var的名称?可能有更好的解决方案。

    †强调假设#3

答案 3 :(得分:1)

当然,如果没有为它创建PHP扩展,这是不可能的。

你当然不想依赖它,特别是在一个函数中。函数不应该在其自己的范围之外操作(全局变量除外,但我讨厌它们)。