我想完全清除 $_POST 数组内容,我在互联网上看到的所有示例如下所示:
if (count($_POST) > 0) {
foreach ($_POST as $k=>$v) {
unset($_POST[$k]);
}
}
请告诉我,这个变种不会更好吗?(节约资源的观点)
if (count($_POST) > 0) {
$_POST = array();
}
或不 ?
我想完全清除 $_POST 数组内容,我在互联网上看到的所有示例如下所示:
if (count($_POST) > 0) {
foreach ($_POST as $k=>$v) {
unset($_POST[$k]);
}
}
请告诉我,这个变种不会更好吗?(节约资源的观点)
if (count($_POST) > 0) {
$_POST = array();
}
或不 ?
是的,这很好。$_POST
只是另一个变量,除了它具有(超级)全局范围。
$_POST = array();
……就够了。循环没用。最好将其保留为数组而不是取消设置,以防其他文件试图读取它并假设它是一个数组。
要取消设置$_POST
变量,请将其重新声明为空数组:
$_POST = array();
到目前为止的解决方案都不起作用,因为 POST 数据存储在标头中。根据这篇文章,重定向解决了这个问题。
它可能看起来过于尴尬,但您最好一次取消设置一个元素而不是整个 $_POST 数组。原因如下:如果你使用面向对象编程,你可能有一个类使用 $_POST['alpha'] 而另一个类使用 $_POST['beta'],如果你在第一次使用后取消设置数组,它会使其在其他类中的使用无效。为了安全起见,不要在脚上开枪,只需使用一种可以取消您刚刚使用的元素的小方法:例如:
private function doUnset()
{
unset($_POST['alpha']);
unset($_POST['gamma']);
unset($_POST['delta']);
unset($_GET['eta']);
unset($_GET['zeta']);
}
只需调用该方法并取消设置那些已传递给变量或参数的超全局元素。然后,可能需要超全局元素的其他类仍然可以使用它们。
但是,明智的做法是在将超全局变量传递给封装对象后立即取消设置它们。
unset()
和初始化:unset($_POST);
$_POST = array();
或在单个语句中:
unset($_POST) ? $_POST = array() : $_POST = array();
但是你想这样做的原因是什么?
为了回答“为什么”有人可能会使用它,我很想使用它,因为我在页面刷新后或从一个页面转到另一个页面时存储了 $_POST 值。我的感觉告诉我这不是一个好的做法,但它仍然有效。