PHP $ _GET / $ _ POST通过变量变量

时间:2012-03-13 20:34:42

标签: php variable-variables

我正在尝试使用变量动态访问$ _GET和$ _POST数组。我试图这样做的原因是我可以在多个数组上执行类似的操作,而无需为每个数组声明特定的迭代。我有理由相信这是可能的,因为PHP的文档说它能够使用变量来动态访问数组,但是我无法让它工作。一个简单的演示是当我试图验证某个属性已被设置时。

if(isset(${$this->_array}[$property])) { return ${$this->_array}[$property]; }
else { return null; }

当我运行上面的脚本时,我总是得到null,但是当我静态地寻找所需的属性时,手动使用$ _GET或$ _POST,我得到了预期的结果。我有三重检查$this->_array$property,他们返回正确的字符串值。这些数组是否不可用于此类访问,或者我做错了什么?

7 个答案:

答案 0 :(得分:6)

Superglobals(例如$_POSTcan not be used as variable variables within functions

您可以说$post = $_POST;之类的内容然后使用'post'并且它可以正常工作,但不会直接使用'_POST'

答案 1 :(得分:4)

Superglobals不能作为类或方法中的变量引用引用,因此这将起作用:

<?php
$var = "_GET";
print_r(${$var});

但这不会:

<?php
test();
function test() {
  $var = "_GET";
  print_r(${$var});
}

我怀疑有更好的方法去做你想要完成的事情。

http://php.net/manual/en/language.variables.superglobals.php#refsect1-language.variables.superglobals-notes

答案 2 :(得分:3)

无论你做错了什么,使用变量变量可能会使情况变得更糟。为了你自己的理智,请停下来。在任何情况下都不应将它们部署在生产代码中。它们无法调试,在代码中使用它们就像试图阅读别人用脚写的东西。如果他们有特别灵巧的脚,那么也许你可以理解他们正在做什么。但是99.9999%的情况下,最好只使用普通数组。

话虽如此,请尝试$_REQUEST

答案 3 :(得分:2)

已经有一个包含$_GET$_POST的数组。它的名字是$_REQUEST。话虽如此,它还可以包含$_COOKIE的内容,具体取决于request_order设置,但默认设置仅为$_GET$_POST

答案 4 :(得分:0)

您说您想要访问both the $_GET and $_POST arrays, among others - 这些“他人”是什么?您可以使用$_REQUEST一次性检查$_GET$_POST$_COOKIE的内容。

答案 5 :(得分:0)

你可以做到这一点,但不知道这是一个很好的编码实践

if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
     $method = '_POST';
 }
 else {
    $method = '_GET';
 }
 $data = $$method;

答案 6 :(得分:0)

您可以创建一个引用两个数组的关联数组,然后使用它。

abbas@abbas-VirtualBox:~/Desktop$ ./fork 
parentabbas@abbas-VirtualBox:~/Desktop$ p2
p1
^C
abbas@abbas-VirtualBox:~/Desktop$ ^C //I have to click ctrl c for it to exit
abbas@abbas-VirtualBox:~/Desktop$ 

然后你就可以使用

$params = [
    '_GET' => $_GET,
    '_POST' => $_POST
];