3

関数に処理させたいスーパーグローバル配列の名前を含む変数を渡そうとしましたが、それを機能させることができませんでした。問題の変数が存在しないと主張し、nullを返します。

テストケースを次のコードに簡略化しました。

function accessSession ($sessName)
{
    var_dump ($$sessName);
}

$sessName   = '_SERVER';

var_dump ($$sessName);

accessSession ($sessName);

関数の外にあるvar_dumpは、期待どおりに$_SERVERの内容を返します。ただし、関数のvar_dumpは、上記のエラーをトリガーします。

関数に追加global $_SERVERしてもエラーは解消されませんでしたが、$ _ SERVERを別の変数に割り当て、その変数をグローバルにすることは機能しました(以下を参照)。

function accessSession ($sessName)
{
    global $test;
    var_dump ($$sessName);
}

$test       = $_SERVER;
$sessName   = 'test';

var_dump ($$sessName);

accessSession ($sessName);

これはPHPのバグですか、それとも私は何か間違ったことをしているだけですか?

4

4 に答える 4

3

PHP:変数変数-手動

警告

変数変数は、関数またはクラスメソッド内のPHPのスーパーグローバル配列では使用できないことに注意してください。変数$thisも、動的に参照できない特別な変数です。


ソリューション

function access_global_v1 ($var) {
  global    $$var;
  var_dump ($$var);
}

function access_global_v2 ($var) {
  var_dump ($GLOBALS[$var]);
}

$test = 123;

access_global_v1 ('_SERVER');
access_global_v2 ('test');
于 2012-03-08T10:44:59.597 に答える
2

php.netから:

警告

変数変数は、関数またはクラスメソッド内のPHPのスーパーグローバル配列では使用できないことに注意してください。変数$thisも、動的に参照できない特別な変数です。

于 2012-03-08T10:43:20.017 に答える
-2

$GLOBALSを使用します。そこに行きます:)

<?php

function accessSession ($sessName)
{
    var_dump ($GLOBALS[$sessName]);
}

$sessName   = '_SERVER';

accessSession ($sessName);
于 2012-03-08T10:45:23.143 に答える
-2

答えはかなり単純です。変数変数を使用しないでください。代わりに配列
を 使用してください。

(そして、はい-あなたは何か間違ったことをしています。いいえ、それはPHPのバグではありません。)

于 2012-03-08T10:40:43.747 に答える