34

我想完全清除 $_POST 数组内容,我在互联网上看到的所有示例如下所示:

if (count($_POST) > 0) {
    foreach ($_POST as $k=>$v) {
        unset($_POST[$k]);
    }
}

请告诉我,这个变种不会更好吗?(节约资源的观点)

if (count($_POST) > 0) {
     $_POST = array();
}

或不 ?

4

6 回答 6

63

是的,这很好。$_POST只是另一个变量,除了它具有(超级)全局范围。

$_POST = array();

……就够了。循环没用。最好将其保留为数组而不是取消设置,以防其他文件试图读取它并假设它是一个数组。

于 2012-10-18T11:50:40.280 回答
8

要取消设置$_POST变量,请将其重新声明为空数组:

$_POST = array();
于 2012-10-18T11:50:30.663 回答
7

到目前为止的解决方案都不起作用,因为 POST 数据存储在标头中。根据这篇文章,重定向解决了这个问题。

使用 PHP 在浏览器上按“刷新”按钮时如何删除 $_POST 变量?

于 2018-04-23T20:44:23.677 回答
2

它可能看起来过于尴尬,但您最好一次取消设置一个元素而不是整个 $_POST 数组。原因如下:如果你使用面向对象编程,你可能有一个类使用 $_POST['alpha'] 而另一个类使用 $_POST['beta'],如果你在第一次使用后取消设置数组,它会使其在其他类中的使用无效。为了安全起见,不要在脚上开枪,只需使用一种可以取消您刚刚使用的元素的小方法:例如:

private function doUnset()
{
    unset($_POST['alpha']);
    unset($_POST['gamma']);
    unset($_POST['delta']);
    unset($_GET['eta']);
    unset($_GET['zeta']);
}

只需调用该方法并取消设置那些已传递给变量或参数的超全局元素。然后,可能需要超全局元素的其他类仍然可以使用它们。

但是,明智的做法是在将超全局变量传递给封装对象后立即取消设置它们。

于 2015-11-08T14:26:21.733 回答
0

您可以结合使用两者unset()和初始化:

unset($_POST);
$_POST = array();

或在单个语句中:

unset($_POST) ? $_POST = array() : $_POST = array();

但是你想这样做的原因是什么?

于 2012-10-18T11:51:24.150 回答
0

为了回答“为什么”有人可能会使用它,我很想使用它,因为我在页面刷新后或从一个页面转到另一个页面时存储了 $_POST 值。我的感觉告诉我这不是一个好的做法,但它仍然有效。

于 2014-05-04T14:16:04.097 回答