将POST数组传递给PHP函数

6

我能否将整个POST数组传递给一个函数,并在函数内部处理它?

例如:

PostInfo($_POST);


function PostInfo($_POST){
    $item1 = $_POST[0];
    $item2 = $_POST[1];
    $item3 = $_POST[2];
        //do something
return $result;

}

或者这是正确的做法吗?

1
这些是超全局变量。如果register_global打开,您可以在每个函数中看到它们。 - Aif
1
请注意,不需要使用register_global(而不是register_globals)即可使用$HTTP_POST_VARS$_POST的非超全局和已弃用的兄弟)!请参见此处:http://de.php.net/manual/en/ini.core.php#ini.register-globals。 - Stefan Gehrig
没错,那是我对它用途的另一个猜测。我记不清了,但我知道 Aif 是错误的。无论如何,register_globals不好的!除此之外,它已经被弃用了。不要使用它! - Matthew Scharley
3个回答

9

实际上,您可以将 $_POST 传递给任何接受数组的函数。

function process(array $request)
{

}

process($_POST);
process($_GET);

非常适合测试。


2
这是推荐的做法。它被称为依赖注入 - Machavity

9
是的。但如果您要将本地变量命名为$_POST,则不必费心。 $_POST是一个“超全局变量”,它是一个全局变量,不需要使用global关键字就可以在正常范围之外使用它。 您上面的函数将在没有参数的情况下工作。 注意:在PHP 5.4或更高版本中,您不能将任何超级全局变量(即$_POST)用作函数参数。这将生成致命错误。

2
$_POST 数组 和 PHP 中的其他数组一样(除了它是所谓的 超级全局变量),因此您可以将其作为函数参数传递、传递并甚至更改它(尽管在大多数情况下这可能不明智)。
关于您的代码,我建议进行一些修改以使其更加清晰:
PostInfo($_POST);

function PostInfo($postVars)
{
    $item1 = $postVars[0];
    $item2 = $postVars[1];
    $item3 = $postVars[2];
        //do something
    return $result;
}

这将明显区分函数参数和$_POST超全局变量。另一种选择是简单地移除函数参数,并依赖于$_POST的超级全局能力:

PostInfo();

function PostInfo()
{
    $item1 = $_POST[0];
    $item2 = $_POST[1];
    $item3 = $_POST[2];
        //do something
    return $result;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接