2012-05-11 16 views
12

Semplicemente curioso di sapere quale sarebbe la migliore pratica per qualcosa di simile:Come dovrei restituire più variabili in una funzione (per le migliori pratiche)?

Una funzione, che restituisce più variabili - come si dovrebbe restituire queste variabili?

come questo (globalizzante):

function myfun(){ 

global $var1,$var2,$var3; 

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

}//end of function 

o come questo (restituisce un array):

function myfun(){ 

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

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

return $ret_var; 

}//end of function 

ho fatto un test delle prestazioni, e sembra che l'utilizzo di matrici è più veloce (dopo un pochi aggiornamenti):

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

Ma sono curioso di sapere quale metodo è il migliore praticato per una situazione semplice su così?

+2

Significa che gli array sono più veloci, giusto? 5.999999999999505E-6 <2.0999999999938E-5 – jrennie

+2

Evitare il più possibile le cifre globali ... –

+0

my bad. fisso. xD –

risposta

18

Si dovrebbe assolutamente restituire un array. È molto più chiaro È anche possibile utilizzare il list costrutto per simulare più valori di ritorno a-la pitone:

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

Edit: in alcuni casi, un array associativo è anche abbastanza appropriato. Non posso immaginare che la differenza di prestazioni meriterebbe questa perdita di chiarezza.

+0

Fantastico! Grazie xD –

2

L'opzione di array associativo è migliore da un punto di vista della manutenzione del codice poiché non si sta spostando lo spazio dei nomi globale. Sarà anche più facile per gli altri leggere il tuo codice.

5

utilizzare i riferimenti (se ha un senso) http://de.php.net/manual/en/language.references.php

Esempio:

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

o restituire un array.

E NON UTILIZZARE MAI GLOBALI! Il design è pessimo e non è gestibile.

2

Si potrebbe restituire un array e utilizzare la lista per ottenere i valori, vedere http://www.php.net/manual/en/function.list.php

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

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

echo "$var1, $var2"; 

funziona per me, non so quanto velocemente che è, ma forse sembra più pulito nel codice.

+1

@tandu ha dato già la stessa risposta ... –

+0

beh, non sono così veloce ... Volevo testare prima il mio codice, e ho dovuto controllare come evidenziare la sintassi - la prossima volta, forse. .. – kratenko

2

È possibile utilizzare la classe 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

Dal momento che questo si classifica così alta su Google e il fatto che mi c'è voluto un po 'per trovare una risposta chiara a me stesso di una cosa così semplice ...

Per dare una risposta completa e completamente chiarire come restituire più variabili che si può effettivamente utilizzare in modo indipendente al di fuori della vostra funzione:

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 

Se si utilizza i risultati di query di database all'interno della vostra funzione più che probabile che avrete bisogno di passare la variabile di connessione nella funzione.Ad esempio, diremo $ db è la nostra connessione al database e dovresti semplicemente modificare le due righe di codice seguenti:

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

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