[最終編集]
Variables variable PHP Manual http://www.php.net/manual/en/language.variables.variable.phpに含まれる重要な警告を見逃しているようです :
変数変数は、関数またはクラス メソッド内の PHP のスーパーグローバル配列では使用できないことに注意してください。変数 $this は、動的に参照できない特殊な変数でもあります。
[元の質問]
html/サーバー変数 $_POST、$_GET、$_SESSION などを設定/取得しようとして問題が発生しました。動的に変数を使用してその名前を保持します:
// Direct name
${'_GET'}['test'] = '1';
// Variable-holded name
$varname = '_GET';
${$varname}['test'] = '2';
echo "value is " . $_GET['test'];
出力します:
値は 1 です
理由はありますか?
[編集1]これが私がこのように使いたい理由です:
class Variable {
protected static $source;
public function __get($key) {
// Some validation / var manip needed here
if ( isset( ${self::$source}[$key] ) ) {
return ${self::$source}[$key];
}
}
public function __set($key, $value) {
// Some validation / var manip needed here too
${self::$source}[$key] = $value;
}
}
final class Get extends Variable {
use Singleton;
public static function create() {
parent::$source = "_GET";
}
}
final class Post extends Variable {
use Singleton;
public static function create() {
parent::$source = "_POST";
}
}
final class Session extends Variable {
use Singleton;
public static function create() {
parent::$source = "_SESSION";
}
}
create は、インスタンス化時にシングルトン コンストラクターで呼び出されます
[編集2] PHP 5.4.3を使用