提问人:mseancole 提问时间:3/14/2012 更新时间:5/6/2021 访问量:1005
PHP $_GET/$_POST 通过变量变量
PHP $_GET/$_POST via variable variables
问:
我正在尝试使用变量动态访问 $_GET 和 $_POST 数组等。我尝试这样做的原因是,我可以对多个数组执行类似的操作,而无需为每个数组声明特定的迭代。我有理由确定这是可能的,因为 PHP 的文档说它能够使用变量变量来动态访问数组,但是我无法让它工作。一个简单的演示是当我尝试验证是否已设置某个属性时。
if(isset(${$this->_array}[$property])) { return ${$this->_array}[$property]; }
else { return null; }
当我运行上述脚本时,我总是得到 null,但是当我使用 $_GET 或 $ _POST 手动寻找所需的属性时,我得到了所需的结果。我已经进行了三重检查,他们返回了正确的字符串值。这些阵列是否无法进行此类访问,或者我做错了什么?$this->_array
$property
答:
已经有一个数组同时包含 和 。它被命名为 $_REQUEST
。话虽如此,它也可以包含取决于request_order
设置的内容,但默认值为 just 和 .$_GET
$_POST
$_COOKIE
$_GET
$_POST
你说你想访问——这些“其他人”是什么?可用于同时检查 、 和 所有内容。both the $_GET and $_POST arrays, among others
$_REQUEST
$_GET
$_POST
$_COOKIE
无论你做错了什么,使用变量都可能使情况变得更糟。为了你自己的理智,请停下来。在任何情况下,都不应将它们部署在生产代码中。它们无法调试,在代码中使用它们就像试图阅读别人用脚写的东西一样。如果他们的脚特别灵巧,那么也许你可以理解他们在做什么。但是在99.9999%的情况下,最好只使用普通数组。
话虽如此,请尝试。$_REQUEST
超全局变量(如 )不能用作函数中的变量。$_POST
你可以说这样的话,然后使用,它会起作用,但直接使用不会。$post = $_POST;
'post'
'_POST'
超全局变量不能作为类或方法中的变量引用,因此这将起作用:
<?php
$var = "_GET";
print_r(${$var});
但这不会:
<?php
test();
function test() {
$var = "_GET";
print_r(${$var});
}
我怀疑有一种更好的方法来做你想要完成的事情。
评论
你可以这样做,但不知道这是否是一种好的编码实践
if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
$method = '_POST';
}
else {
$method = '_GET';
}
$data = $$method;
您可以创建一个引用这两个数组的关联数组,并使用它。
$params = [
'_GET' => $_GET,
'_POST' => $_POST
];
然后你可以使用
return $params[$this->_array][$property] ?? null;
上一个:如何批量生成类实例的属性?
评论