问题 原始变量名传递给函数? [重复]


可能重复:
PHP:获取作为参数传递的变量的名称
如何在PHP中将变量名称作为字符串? 

如果我有

$abc = '123';

function write($var){

}

我怎么会在里面 write 找出现在由变量表示的变量 $var 被称为 $abc


8735
2017-12-21 20:10


起源

即使它真的代表了你的代码,也无论如何都没有办法。算了吧。 - Your Common Sense
你不能。只有值传递给函数。 - Pekka 웃
你为什么要这样做?有可能有一种更简单或更合适的方法(或者你不应该开始这样做)...... - ircmaxell
可能重复 如何在PHP中将变量名称作为字符串? (在@ Gordon的帖子中重复的那个) - ircmaxell
@Jonah那是因为ppl现在懒得搜索。我相信还有一些额外的重复 - Gordon


答案:


这是不可能的。即使是通过引用也无济于事。您必须将名称作为第二个参数传递。

但你所问的是最确定的  一个很好的解决方案。


7
2017-12-21 20:12



从技术上讲,这是可能的,但仍然不是一个好主意。 - zzzzBov


您无法获取变量名称,但如果您想要它进行调试,那么您可以使用PHP的内置函数 debug_backtrace(),我建议看看 Xdebug的 同样。

使用此功能,您可以获取调用者的一些数据,包括文件和行号,这样您可以在运行脚本后手动查找该行:

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();

3
2017-12-21 21:41



我测试了你的 完整的例子。两个都在调用 write 方法,输出相同;除了约 line 字段(其值等于每种情况下的调用行)。 - Mir-Ismaili


这个答案做了一些假设:

  1. 它有效(我还没有测试过)
  2. 那是你 只要 传入全局声明的变量
  3. 传递的变量是唯一的或对象

2
2017-12-21 20:19



这不行。 === 不检查参考,它检查值和类型。所以, $a = 1; $b = &$a; $c = 1, 然后 $a === $c 也是如此。 - netcoder
@netcoder可能我应该在假设上强调第3点。传递的变量 具有 独一无二 - zzzzBov
这个答案 和我一样,除了我通过引用传递(不必要)。 - zzzzBov


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

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


1
2017-12-21 20:20



你是全球主义者...... - Nino Škopac