3

GET パラメータを使用してスーパーグローバル変数の名前を取得しようとしていました。_VAR_NAMEget リクエストで( なしで)のみを渡すように言われた$ので、プログラムでは変数 variable: を介してアクセスする必要があります$$_GET['parameter_name']

以外はすべてうまくいきました$_SERVER。何が悪いのかを試すために、何が起こっているのかをテストするために小さなphpスクリプトを実行しました. コードは次のとおりです。

<?php
    // ¡¡ This does not work !!
        $nombre = "_SERVER";
        $var = $$nombre;
        print_r($var);
    // This works 
        $nombre = "_GET";
        $var = $$nombre;
        print_r($var);
?>

バージョンが機能しない理由はあります_SERVERか? 次のエラーが表示されます。

注意: 未定義の変数: _SERVERin ...

4

4 に答える 4

2

なぜこれが必要なのかわかりません。変数変数は使用しません(通常はより良い方法があります)。

$ nombre変数に基づいて単純な切り替えを行うことができますが、スーパーグローバル変数はそれほど多くありません。

switch ($nombre) {
  case "_SERVER" : 
    print_r($_SERVER);
    break;
  case "_GET" : 
    print_r($_GET);
    break;
  case "_POST" : 
    print_r($_POST);
    break;
  // ...
  default:
    echo "Unknown variable";
}
于 2011-03-08T17:13:00.800 に答える
1

別の構文を試すことができます。

$var = $GLOBALS["_SERVER"];
print_r($var);

これは と機能的に同等$$varvarです。

チェックするもう1つの重要なことは、$_SERVERそれ自体が存在するかどうかです。(そうでない場合は、スクリプトの先頭に空のcount($_SERVER);式を配置します。)

variables_order=で変更された場合、存在しない可能性がありますphp.ini(ただし、最近の PHP バージョンでは実際には空の配列として表示されるはずです)。

于 2011-03-08T17:35:24.883 に答える
0

それは私にとってここで完全に機能します。print_r ($_SERVER) を試しましたか

システムに取り込まれていない可能性があります。

スクリプトのどこかで設定を解除していないことを確認してください。


関数またはクラスで使用していますか?

警告には、これは関数またはクラス内のスーパーグローバルでは使用できないことが示されています。

あなたの最善の策は、switch ステートメントです。

于 2011-03-08T17:21:34.923 に答える