2009-11-02 6 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

+1

'register_globalals가 아닌'register_globals'는'$ HTTP_POST_VARS' (non-superglobal과'$ _POST'에 반대되는 형제)를 사용할 필요가 없습니다! 여기를 참고하십시오 : http://de.php.net/manual/en/ini.core.php#ini.register-globals –

+0

맞아요, 그건 내 다른 추측이었습니다. 정확하게 기억할 수는 없지만 Aif가 잘못되었다는 것을 알았습니다. 여하튼,'register_globals'은 ** bad **입니다! 그 너머, 그것은 비추천입니다. 그것을 사용하지 마십시오! –

답변

7

예. 그래도 로컬 변수 $_POST의 이름을 지정하려고한다면 신경 쓸 필요가 없습니다. $_POST은 '슈퍼 글로벌'으로, global 키워드를 사용하지 않아도 정상 범위 밖에서 사용할 수 있습니다. 위의 함수는 매개 변수없이 작동합니다.

참고 당신은 PHP 5.4 이상에서 함수 인수로 어떤 자동 전역 (즉 $_POST)를 사용할 수 없습니다. 치명적인 오류가 발생합니다

6

실제로 배열을 취하는 모든 함수에 $ _POST를 전달할 수 있습니다.

function process(array $request) 
{ 

} 

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

테스트 용으로 좋습니다.

+1

이렇게하는 것이 좋습니다. 그것은 [의존성 주입]이라고합니다 (http://stackoverflow.com/questions/130794/what-is- dependency-injection) – Machavity

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