2012-05-11 5 views
12
가장 좋은 방법은 이런 일이 될 것입니다 무엇을 알고 그냥 궁금

: 여러 변수를 반환함수에서 여러 변수를 반환하려면 어떻게해야합니까?

함수 - 어떻게 하나 이러한 변수를 반환해야합니까? 이 같은

(세계화) :

function myfun(){ 

global $var1,$var2,$var3; 

$var1="foo"; 
$var2="foo"; 
$var3="foo"; 

}//end of function 

또는 같은

는 (배열을 반환) :

function myfun(){ 

$var1="foo"; 
$var2="foo"; 
$var3="foo"; 

$ret_var=array("var1"=>$var1,"var2"=>$var2,"var3"=>$var3); 

return $ret_var; 

}//end of function 

나는 성능 테스트를 수행하고, 배열을 사용하는 것이 더 빠르다처럼은 후 (보이는 몇 새로 고침) :

array took: 5.9999999999505E-6 
global took: 2.0999999999938E-5 

하지만 가장 간단한 situati를 위해 연습하는 방법을 알고 궁금 해요 이런 식으로?

+2

배열이 빠르다는 것을 의미합니까? 5.9999999999505E-6 <2.0999999999938E-5 – jrennie

+2

최대한 글로벌을 피하십시오 ... –

+0

내 잘못입니다. 결정된. xD –

답변

18

절대적으로 배열을 반환해야합니다. 그것은 훨씬 명확하다.

function foon() { 
    return array('one', 'two', 'three'); 
} 
list($one, $two, $three) = foon(); 

편집 : 연관 배열도 매우 적합한 경우에 당신은 여러 반환 값을 - 라 파이썬을 시뮬레이션 할 list 구조를 사용할 수 있습니다. 성능 차이로 인해 이러한 선명도의 손실이 발생한다고 생각하지 않습니다.

+0

굉장! 감사합니다 xD –

2

전역 배열을 사용하지 않기 때문에 연관 배열 옵션이 코드 유지 관리 관점에서 더 좋습니다. 다른 사람들이 귀하의 코드를 더 쉽게 읽을 수 있습니다.

5

사용 참조 (이 취하면 의미) http://de.php.net/manual/en/language.references.php

예 :

function myfun(&$var1, &$var2, &$var3) 
{ 
    $var1="foo"; 
    $var2="foo"; 
    $var3="foo"; 
} 

또는 배열을 반환합니다.

절대 사용하지 마세요! 그것은 매우 나쁜 디자인이며 유지 보수가 불가능합니다.

2

당신은, 내가 즉,하지만 어쩌면 그것은 당신의 코드에서 청소기 보이는 얼마나 빨리 모르는 나를 위해 http://www.php.net/manual/en/function.list.php

function multiple() { 
    return array('val1', 'anotherval'); 
} 

list($var1, $var2) = multiple(); 

echo "$var1, $var2"; 

작품을 참조 배열을 반환하고 값을 얻기 위해 목록을 사용할 수 있습니다.

+1

@ tandu는 똑같은 대답을 이미했습니다 ... –

+0

글쎄, 나는 그렇게 빠르지 않습니다 ... 저는 먼저 코드를 테스트하고 싶었고 구문 강조 방법을 점검해야했습니다 - 다음 번에, 어쩌면. .. – kratenko

2

클래스 http://php.net/manual/en/keyword.class.php을 사용할 수 있습니다.

class Vari { 
    var $var1; 
    var $var2; 
    var $var3; 
} 

function myfun() {  
    $var = new Vari; 
    $var->var1="foo"; 
    $var->var2="foo"; 
    $var->var3="foo"; 
    return $var;  
} 

$v = myfun(); 
echo $v->var1; 
/*foo*/ 
2

이 그렇게 단순 뭔가 명확한 대답 자신을 찾을 걸 렸어요 것을 구글과 사실에 너무 높은 순위 때문에 ...

완전한 대답을 철저하게 규명하는 방법에

function myFunction() { 

     //your code that returns your results to variables below 

    $var1 = 'message 1'; 
    $var2 = 'message 2'; 
    $var3 = 'message 3'; 

    // must put all variables inside an array to get them outside of function 
    $return_array = ($var1, $var2, $var3); 

    // return your array inside function 
    return $return_array; 
    } 



// call function (returns all variables in array) 
$get_results = myFunction(); 

// call and assign individual variables outside of function 
$var1 = $get_results[0]; 
$var2 = $get_results[1]; 
$var3 = $get_results[2]; 



// now you can use individual variables outside of function for example: 

echo $var2; //will now output: message 2 
echo $var3; //will now output: message 3 

당신이 함수에 연결 변수를 전달해야합니다 것보다 더 많은 함수 내부 데이터베이스 쿼리의 결과를 사용하는 경우 : 당신이 실제로 함수의 외부에 독립적으로 사용할 수있는 여러 변수를 반환합니다.예를 들어 $ db가 데이터베이스 연결이고 다음 코드 두 줄만 수정하면됩니다.

//original code to change 
    function myFunction() { 
    //change to 
    function myFunction($db) { 

    //original code to change 
    $get_results = myFunction(); 
    //change to 
    $get_results = myFunction($db); 
관련 문제