输出变量名及其值(在函数中)

时间:2012-06-14 15:32:41

标签: php variables

我希望能够输出变量的名称以及该变量的值。我的用例与调试情况很接近,但我实际上正在为其他开发人员和管理人员构建一个概念证明,以便我们可以讨论输入过滤等问题。总之...

输出HTML目前是一个表,但这无关紧要。我当然可以打印出HTML中的名称和内容,但这很麻烦,很容易输入错误。我想要一个我可以使用变量名称调用的函数,或者使用变量名称作为参数的字符串,并使该函数生成适当的HTML以供显示。这似乎不起作用。

这有效:

<tr><td>$variable</td><td><?php print $variable?></td></tr>

这不是:

function rowFromVar($varname) {
    $result  = "<tr>";
    $result .= "<td>\$$varname</td>";
    $result .= "<td>" . $$varname . "</td>";
    $result .= "</tr>";
    return $result;
}
// now in the HTML...
<table><?php print rowFromVar("variable");?></table>

变量变量$$varname始终为空。请注意,我将变量的名称作为字符串传递,而不是尝试传递变量本身并使用它。我知道there be dragons那样。相反,我试图将变量的名称作为字符串传递,然后使用变量变量(是的,我知道)来返回原始变量的值。这似乎也不起作用,我认为这是一个范围问题。

有没有什么好办法可以完成我正在寻找的东西?

6 个答案:

答案 0 :(得分:1)

  

变量变量$$ varname始终为空。请注意,我是   将变量的名称作为字符串传递,而不是尝试   传递变量本身并使用它

应为空

由于您将variable作为值传递,因此:

$$varname

变为:

$variable

并且没有为其设置

换句话说,您只是创建一个变量,其名称作为参数传递给函数,但您没有为它创建值。

<强>解决方案:

如果这是你想要做的事情,这样可以正常工作:

function rowFromVar($varname) {
    $result  = "<tr>";
    $result .= "<td>\$$varname</td>";
    $result .= "<td>" . $varname . "</td>";
    $result .= "</tr>";
    return $result;
}

// now in the HTML...
<table><?php print rowFromVar("variable");?></table>

只需从此行的变量中删除$,如上所述:

$result .= "<td>" . $$varname . "</td>";
--------------------^

答案 1 :(得分:1)

您是否尝试使用$GLOBALS[$varname]代替$$varname?此示例中的变量位于全局范围内,您无法直接访问函数中的全局变量。

答案 2 :(得分:0)

以下代码应该可以使用,因为您怀疑范围是此处的主要问题。

function rowFromVar($varname, $contents) {
    $result  = "<tr>";
    $result .= "<td>\$$varname</td>";
    $result .= "<td>" . $contents . "</td>";
    $result .= "</tr>";
    return $result;
}
// now in the HTML...
<table><?php print rowFromVar("variable", $variable);?></table>

答案 3 :(得分:0)

您需要在函数中声明变量global,以便它引用全局版本。在函数开头添加此行应解决问题:

function rowFromVar($varname) {
    global $$varname;
    $result  = "<tr>";
    $result .= "<td>\$$varname</td>";
    $result .= "<td>" . $$varname . "</td>";
    $result .= "</tr>";
    return $result;
}

答案 4 :(得分:0)

请尝试以下代码:

function rowFromVar($varname) {
    $result  = "<tr>";
    $result .= "<td>{$varname}</td>";
    $result .= "<td>".$varname."</td>";
    $result .= "</tr>";
    return $result;
}

<table><?php echo rowFromVar("variable");?></table>

答案 5 :(得分:0)

我有类似的问题,我解决了如下问题。

function contents_of($string)
{
  eval("global $string; \$value = $string;");
  return "Variable $string has value $value";
}

$testing = 123;
echo contents_of('$testing');

// produces...
// Variable $testing has value 123