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

ここでの主な問題はスコープであると思われるため、次のコードが機能するはずです。

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

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 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 に答える