1

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

输出 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始终为空。请注意,我将变量的名称作为字符串传递,而不是尝试传递变量本身并使用它。我知道那里有龙。相反,我试图将变量的名称作为字符串传递,然后使用变量变量(是的,我知道)返回原始变量的值。这似乎也不起作用,我打赌这是一个范围问题。

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

4

6 回答 6

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>";
--------------------^
于 2012-06-14T15:35:45.963 回答
1

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

于 2012-06-14T15:36:41.530 回答
0

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

function rowFromVar($varname) {
    global $$varname;
    $result  = "<tr>";
    $result .= "<td>\$$varname</td>";
    $result .= "<td>" . $$varname . "</td>";
    $result .= "</tr>";
    return $result;
}
于 2012-06-14T15:42:28.487 回答
0

请尝试以下代码:

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

<table><?php echo rowFromVar("variable");?></table>
于 2012-06-14T15:42:38.470 回答
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>
于 2012-06-14T15:38:25.777 回答
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
于 2014-08-04T12:27:04.380 回答