Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 - Fatal编程技术网

如何在PHP中获取变量名?

如何在PHP中获取变量名?,php,Php,func($name1)应返回name1 可能吗?不,在PHP中无法获取变量名称 调用函数时,该函数只接收变量的内容,而不接收“变量本身”——这意味着函数无法找到传递给它的变量的名称。否 定义函数时,需要为其指定一个局部变量名,使其位于该函数的作用域内。PHP将向函数传递适当的值,但符号不再在作用域中 不过,您可以考虑使用“”作为替代方法。这里有一个函数可以实现这一点 function var_name (&$iVar, &$aDefinedVars) { foreach

func($name1)
应返回
name1


可能吗?

不,在PHP中无法获取变量名称

调用函数时,该函数只接收变量的内容,而不接收“变量本身”——这意味着函数无法找到传递给它的变量的名称。

定义函数时,需要为其指定一个局部变量名,使其位于该函数的作用域内。PHP将向函数传递适当的值,但符号不再在作用域中


不过,您可以考虑使用“”作为替代方法。

这里有一个函数可以实现这一点

function var_name (&$iVar, &$aDefinedVars)
{
    foreach ($aDefinedVars as $k=>$v)
        $aDefinedVars_0[$k] = $v;

    $iVarSave = $iVar;
    $iVar     =!$iVar;

    $aDiffKeys = array_keys (array_diff_assoc ($aDefinedVars_0, $aDefinedVars));
    $iVar      = $iVarSave;

    return $aDiffKeys[0];
}
这样说吧

$test = "blah";
echo var_name($test,  get_defined_vars());
这将打印出“测试”

我最初发现该函数还可以通过迭代get_defined_vars()返回的数组来实现。这可能更容易理解。

显然,有可能达到足够高的疯狂值

本页的评论包括以下几种技巧:

linuxmail.org的lucas dot karisny的答案在我的机器上运行:

YMMV.

好主意?没有

你有没有应该在哪里做的用例?没有

概念证明?当然

<?php

a($test);


function a($x) {
    $trace = debug_backtrace();
    $file = file($trace[0]['file']);
    $line = $file[$trace[0]['line']-1];

    var_dump($line); // Prints "a($test);" Do the Stringparsing and your done

}

“生动活泼的写作是简洁的。一个句子不应包含不必要的单词,一个段落不应包含不必要的句子,这与图纸不应包含不必要的线条和机器不应包含不必要的零件的原因相同。这并不要求作者把所有的句子都写得简短,也不要求他回避所有细节,只对主题进行概述,而是要求每个词都能说明问题。”-S&WBut给出一些解释(例如,关于“为什么”这是不可能的)也很好,你们不认为吗?你们两个应该停止争论,并注意到其他人,andyjdavis,发布了一个有用的答案。@bmb…如果你需要访问变量的名称,你有一个设计问题…@Chacha102,也许是这样,但这并不意味着这是不可能的。在TCL中,你可以很容易地做到这一点。首先,你为什么要这样做t?请给出用例。我无法完全理解上下文。你能吗?是的。你应该吗?绝对不能。我在CodePad()中尝试了这个方法,它成功了。人们应该投票支持这个答案。我想知道为什么另一个答案会简单地说“不”“获得的票数远远超过了这个……人们应该考虑到这个代码的必要性。如果您需要一个键的名称,但将变量保留为抽象变量,那么可以考虑使用数组。由于键入“否”比测试和描述解决方案花费的时间更少,所以“否”有更多的投票权。其他人在“不”被贴出之后,但在答案被贴出之前,就进来投反对票,因为他们不知道如何投反对票,因此认为这是不可能的。希望它能自行解决:)这涉及到复制作用域中每个变量的值,这是非常低效的。这应该行得通,但我不想用它。人们对这个答案投了反对票?怎么回事?