我正在尝试使用变量动态访问$ _GET和$ _POST数组。我试图这样做的原因是我可以在多个数组上执行类似的操作,而无需为每个数组声明特定的迭代。我有理由相信这是可能的,因为PHP的文档说它能够使用变量来动态访问数组,但是我无法让它工作。一个简单的演示是当我试图验证某个属性已被设置时。
if(isset(${$this->_array}[$property])) { return ${$this->_array}[$property]; }
else { return null; }
当我运行上面的脚本时,我总是得到null,但是当我静态地寻找所需的属性时,手动使用$ _GET或$ _POST,我得到了预期的结果。我有三重检查$this->_array
和$property
,他们返回正确的字符串值。这些数组是否不可用于此类访问,或者我做错了什么?
答案 0 :(得分:6)
Superglobals(例如$_POST
)can 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});
}
我怀疑有更好的方法去做你想要完成的事情。
答案 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
];