Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何获取变量的名称?_Php_Variables - Fatal编程技术网

Php 如何获取变量的名称?

Php 如何获取变量的名称?,php,variables,Php,Variables,因此,我需要全局空间中的实际变量名“varName”。这个函数实际上是类中的一个方法 为了简单起见,代码是任意的 我不知道这是否可能,但我想可能通过回调?如果是全局变量,您可以通过以下方式找到原始名称: $varname = array_search($var, $GLOBALS); 但这并不过分可靠;最好的猜测。如果两个全局变量包含相同的值,您只会收到其中任何一个的名称。阅读$GLOBALS变量 这可能是你需要的。根据确定所需变量的方式,例如,可以使用userarray\u search()

因此,我需要全局空间中的实际变量名“varName”。这个函数实际上是类中的一个方法

为了简单起见,代码是任意的


我不知道这是否可能,但我想可能通过回调?

如果是全局变量,您可以通过以下方式找到原始名称:

$varname = array_search($var, $GLOBALS);

但这并不过分可靠;最好的猜测。如果两个全局变量包含相同的值,您只会收到其中任何一个的名称。

阅读
$GLOBALS
变量

这可能是你需要的。根据确定所需变量的方式,例如,可以使用user
array\u search()
根据值查找正确的名称

注意:
$GLOBALS
是关于全局范围的变量

编辑:

但这仍然是一个猜测。您可以尝试以下方法以100%确定地确定所传递变量的名称:

  • 将变量传递给带有引用的方法
  • 使用
    array\u search()
    查找变量名称。如果只有一个键与之匹配,那么您就有了自己的名字。如果没有,请转至下一步
  • 保存变量的初始值,并保存找到匹配元素的位置列表
  • 将变量的值更改为新值。基于新值执行另一次搜索,并从第3点获取位置列表中的位置
  • 此时,您可能已经找到了要查找的变量的名称
  • 但是

    真的需要吗?我建议您应该寻找更简单的解决方案,更好地封装代码


    Ps.
    array\u search()
    实际上只返回一个键()。您应该知道这一点,并使搜索多个结果更加复杂,以便在多个变量与您的搜索条件匹配时不会跳过正确的结果。(EDIT2:正如马里奥建议的那样,
    array\u intersect($GLOBALS,array($var))
    就足够了)

    在C语言中,您可以使用宏。我认为PHP中没有对等的语言

    您可以将变量名作为字符串传递给函数,然后在函数中从GLOBALS获取变量值或对其求值。

    谢谢您的解决方案! 这是我的测试:

    <?php
    $varName = 'what ever';
    
    function save($var)
    {
        $i[array_search($var, $GLOBALS)] = $var;
        print_r($i);
    }
    save($varName);
    ?>
    

    我认为您应该稍微修改一下代码,因为它会让您对要传递的内容以及要存储的内容/位置感到非常困惑。我只想到这个解决方案的可能副本。我相信,仍然有一些解决方案可以解决这个问题,并产生多种结果——您可以执行我在回答中描述的内容。虽然我不知道,如果它能工作……<代码> <代码> > TADEKE:如果你想找到多个匹配的密钥,那也同样简单:<代码> Arayy交叉($Guales,数组($var))< /> > @ TAMER不正确-只考虑两个变量的值等于“代码>”的情况“什么是‘< /代码>”
    <?php
    $varName = 'what ever';
    
    function save($var)
    {
        $i[array_search($var, $GLOBALS)] = $var;
        print_r($i);
    }
    save($varName);
    ?>
    
    Array
    (
        [varName] => what ever
    )