[最终编辑]
似乎我错过了变量变量 PHP 手册 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