【发布时间】:2013-02-26 05:45:10
【问题描述】:
[最终编辑]
似乎我错过了变量变量 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
【问题讨论】:
-
为什么要设置请求变量的值????它们不是为此而设计的。 :)
-
如果你不知道是使用GET还是POST,你可以使用这个:
$var = empty($_POST) ? $_GET : $_POST;然后使用$var。 -
除了请求变量的狡猾获取之外,你的代码对我来说运行得很好:)
-
@fedorqui,甚至还有一个简写形式,称为
$_REQUEST。好吧,它实际上不仅仅如此……但是 99.9% 的时间你不会通过 get、post 和 cookie 传递相同的变量,对吧? :) -
是的,没错@J0HN!几天前我发现了
$_REQUEST,但我的大脑仍然没有它在缓存中:) 感谢您突出显示它。
标签: php variables post dynamic get