【问题标题】:original variable name passed to function? [duplicate]传递给函数的原始变量名? [复制]
【发布时间】:2010-12-21 20:10:34
【问题描述】:

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

【问题讨论】:

  • 即使它真的在你的代码中表现出来了,无论如何也没有办法。算了。
  • 你不能。只有值被传递给函数。
  • 为什么要这样做?有可能有一种更简单或更合适的方法(或者你一开始就不应该这样做)......
  • How to get a variable name as a string in PHP? 的可能重复项(@Gordon 的帖子中重复的那个)
  • @Jonah 那是因为人们现在懒得搜索。我确定还有许多其他重复项

标签: php variables


【解决方案1】:

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

但是你所问的肯定不是解决你的问题的好办法。

【讨论】:

  • 技术上是可行的,但仍然不是一个好主意。
【解决方案2】:

变量名无法获取,但如果你想调试,可以使用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();

【讨论】:

  • 我测试了您的完整示例。两次调用write 方法,输出相同;除了 line 字段(其值等于每种情况下的调用行)。
  • 你知道性能影响吗?这些信息是我们“免费”获得的,因为它很容易获得还是会导致性能下降?
  • 我不知道它是否对性能有任何影响,但您可以简单地分析您的代码以查看它是否有。
【解决方案3】:

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

您当然不想依赖它,尤其是在函数中。函数不应该能够在它自己的范围之外运行(除了全局变量,但我讨厌它们)。

【讨论】:

    猜你喜欢
    • 2011-02-14
    • 2019-03-12
    • 2017-10-24
    • 2015-04-19
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多