我希望能够输出变量的名称以及该变量的值。我的用例与调试情况很接近,但我实际上正在为其他开发人员和管理人员构建一个概念证明,以便我们可以讨论输入过滤等问题。总之...
输出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那样。相反,我试图将变量的名称作为字符串传递,然后使用变量变量(是的,我知道)来返回原始变量的值。这似乎也不起作用,我认为这是一个范围问题。
有没有什么好办法可以完成我正在寻找的东西?
答案 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