完全清除_POST数组

时间:2012-10-18 11:48:44

标签: php

我想要完全清楚$ _POST数组内容,我在互联网上看到的所有示例都是这样的:

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

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

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

6 个答案:

答案 0 :(得分:52)

是的,没关系。 $_POST只是另一个变量,除了它有(super)全局范围。

$_POST = array();

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

答案 1 :(得分:5)

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

$_POST = array();

答案 2 :(得分:3)

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

How to delete $_POST variable upon pressing 'Refresh' button on browser with PHP?

答案 3 :(得分:2)

它可能看起来过于尴尬,但你最好不要一次取消一个元素而不是整个$ _POST数组。 这就是为什么:如果你正在使用面向对象的编程,你可能有一个类使用$ _POST ['alpha']而另一个类使用$ _POST ['beta'],如果你取消设置数组在首次使用后,将无效在其他类中使用。为了安全起见而不是用脚射击自己,只需放入一个方法来取消你刚刚使用过的元素:例如:

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

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

  

然而,你明智的做法是尽快取消超级球   被传递给封装对象。

答案 4 :(得分:0)

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

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

或者在一个声明中:

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

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

答案 5 :(得分:0)

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