是否有一种方法可以一次动态访问$_GET
和$_POST
?IE,比如:
$do = array('GET', 'POST');
foreach($do AS $type) {
foreach (${'_'.type} AS $var=>$val) {
... # logic
}
}
我知道有$_REQUEST
,但这并没有告诉我来源(获取或发布),并且有弃用的HTTP_GET_VARS
和HTTP_POST_VARS
,但那些是弃用的。
显然,我可以单独循环。我尽量避免这样做的原因是,逻辑有点长,但也是一样的。理想的情况是不需要有这个逻辑的副本,让自己容易出错。
或者我完全认为这是错误的方式,有一些其他推荐的方法?
谢谢!
谢谢你
谢谢大家的反馈。我认为@ decze最客观地回答了这个问题,但是@charlee(以及后来的decze)暗示了一个更好的解决方案。
最后,我创建了一个带有逻辑的函数,然后将其放在foreach中,如下所示:foreach($_GET AS $var => $val) {
$_GET[$var] = func($val);
}
我最终使用了两个foreach(),但我很欣赏它的可读性和增强的可用性。再次感谢大家!
foreach (array('get' => $_GET, 'post' => $_POST) as $type => $values) {
foreach ($values as $key => $value) {
...
}
}
如果您确实关心源,我建议您单独循环。$_POST和$_GET混在一起是不安全的,因为黑客更容易通过GET传递数据,而GET应该是POST。
长逻辑总是可以提取到一个函数中,所以你不会有这个逻辑的副本。
将您的数组与array_merge()
合并:
$_GET = array('one' => 'foo', 'two' => 'bar');
$_POST = array('three' => 'foo', 'four' => 'bar');
$merged = array('_GET' => $_GET, '_POST' => $_POST);
foreach($merged AS $type => $array) {
foreach ($array AS $var => $val) {
echo "[{$type}] {$var}: {$val}" . PHP_EOL;
}
}
输出[_GET] one: foo
[_GET] two: bar
[_POST] three: foo
[_POST] four: bar
是的,你不应该使用$_REQUEST
,因为
它结合了COOKIE以及GET和POST,并且COOKIE数据总是优先,从而可能产生危险的"粘性"变量。
如果逻辑相同,您可以尝试使用函数。将整个代码放入函数中,并传递想要循环的数组,即$_GET或$_POST。如果您想知道它是GET还是POST的来源,您可以尝试连接。