2009-11-02 170 views
4

我可以将整个POST数组传递给函数并在函数内处理它吗?将POST数组传递给php函数

PostInfo($_POST); 


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

} 

或这是这样做的正确方法是什么?

+1

这些都是超全局变量。如果register_global打开,你可以在每个函数中看到它们。 – Aif 2009-11-02 12:09:36

+1

请注意,'register_globals'(而不是'register_global')不需要使用'$ HTTP_POST_VARS'(非超全局的和不推荐的兄弟''_POST')!看到这里:http://de.php.net/manual/en/ini.core.php#ini.register-globals – 2009-11-02 12:21:01

+0

对,这是我的另一个猜测是它的用途。记不起来了,但我知道Aif是错的。无论如何,'register_globals'是**糟糕!除此之外,它已被弃用。不要使用它! – 2009-11-02 12:33:59

回答

7

是的。如果你打算命名局部变量$_POST虽然,不要打扰。 $_POST是'超全球',全球不需要global关键字在正常范围外使用它。你的上面的函数可以在没有参数的情况下工作。

注意不能使用任何超全局(即$_POST)在PHP 5.4或更高版本的函数参数。它会产生致命错误

6

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

function process(array $request) 
{ 

} 

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

非常适合测试。

+1

这是执行此操作的首选方法。它被称为[依赖注入](http://stackoverflow.com/questions/130794/what-is-dependency-injection) – Machavity 2015-04-17 14:21:40

1

$_POST-array就像PHP所有其他数组的数组(除了是所谓的superglobal),这样你就可以把它作为一个函数参数,到处传递它,甚至改变它(尽管这可能并不明智在大多数情况下)。

关于你的代码,我会改变这一点,使之更加明确:

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; 
}