2012-05-11 16 views
12

Po prostu ciekawa, jaka będzie najlepsza praktyka dla czegoś podobnego:Jak powinienem zwrócić wiele zmiennych w funkcji (najlepsze praktyki)?

Funkcja zwracająca wiele zmiennych - jak powinieneś zwrócić te zmienne?

tak (globalizacji):

function myfun(){ 

global $var1,$var2,$var3; 

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

}//end of function 

lub tak (powrót tablicę):

function myfun(){ 

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

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

return $ret_var; 

}//end of function 

zrobiłem test wydajności, a wygląda na to, używając tablic jest szybszy (po kilka odświeżeń):

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

Ale jestem ciekawa, która metoda jest najlepiej sprawdzona w prostych sytuacjach na takim?

+2

Masz na myśli tablice są szybsze, prawda? 5.9999999999505E-6 <2.0999999999938E-5 – jrennie

+2

Unikaj globali w miarę możliwości ... –

+0

moje złe. naprawiony. xD –

Odpowiedz

18

Należy bezwzględnie zwrócić tablicę. Jest o wiele jaśniejszy. Można nawet użyć list konstrukt symulować wiele wartości powrócić a-la Pythona:

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

EDIT: w niektórych przypadkach asocjacyjna jest dość odpowiednie. Nie mogę sobie wyobrazić, że różnica w wynikach byłaby zasługą tej utraty jasności.

+0

Awesome! Dzięki XD –

2

Asocjacyjna opcja macierzy jest lepsza z punktu widzenia konserwacji kodu, ponieważ nie tworzysz globalnej przestrzeni nazw. Czytelnikom łatwiej będzie odczytać kod.

5

pomocą odniesienia (jeżeli ma sens) http://de.php.net/manual/en/language.references.php

przykład:

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

lub zawracania tablicę.

I NIGDY NIE UŻYWA GLOBALSÓW! Jest to bardzo zły projekt i nie do utrzymania.

2

Ty mógł wrócić tablicy i użyj listy, aby uzyskać wartości, zobacz http://www.php.net/manual/en/function.list.php

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

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

echo "$var1, $var2"; 

pracuje dla mnie, nie wiem jak szybko to znaczy, ale może to wygląda czystsze w kodzie.

+1

@tandu podał dokładnie tę samą odpowiedź ... –

+0

cóż, nie jestem tak szybki ... Najpierw chciałem przetestować mój kod i musiałem sprawdzić, jak zrobić podświetlanie składni - może następnym razem. .. – kratenko

2

Ponieważ zajmuje tak wysoko w Google i fakt, że zajęło mi to trochę czasu, aby znaleźć jasną odpowiedź sobie na coś tak prostego ...

Aby dać pełną odpowiedź i dokładnie wyjaśnić, w jaki sposób zwracać wiele zmiennych, które rzeczywiście można używać niezależnie od swojej funkcji na zewnątrz:

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 

Jeśli używasz wyników z zapytania do bazy danych wewnątrz funkcji więcej niż prawdopodobne, trzeba będzie zdać zmienną połączenia do funkcji.Na przykład, powiemy, że $ db jest naszym połączeniem z bazą danych i po prostu zmodyfikujesz dwa wiersze kodu poniżej:

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

    //original code to change 
    $get_results = myFunction(); 
    //change to 
    $get_results = myFunction($db);