How should I return multiple variables in a function (for best practices)?

青春壹個敷衍的年華 提交于 2019-12-06 20:12:06

问题


Just curious to know what the best practice would be for something like this:

A function, that returns multiple variables - how should one return these variables?

like this (globalizing):

function myfun(){

global $var1,$var2,$var3;

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

}//end of function

or like this (returning an array):

function myfun(){

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

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

return $ret_var;

}//end of function

I done a performance test, and it looks like using arrays is faster (after a few refreshes):

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

But I'm curious to know which method is the best practiced for a simple situation like this?


回答1:


You should absolutely return an array. It is much clearer. You can even use the list construct to simulate multiple return values a-la python:

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

Edit: in some cases an associative array is also quite appropriate. I can't imagine the performance difference would merit this loss of clarity.




回答2:


Use references (if it makes sense) http://de.php.net/manual/en/language.references.php

Example:

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

Or return an array.

AND NEVER USE GLOBALS! It is very bad design and not maintainable.




回答3:


The associative array option is better from a code maintenance standpoint since you're not mucking-up the global namespace. Will also be easier for others to read your code.




回答4:


You could return an Array and use list to get the values, see http://www.php.net/manual/en/function.list.php

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

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

echo "$var1, $var2";

Works for me, I don't know how fast that is, but maybe it looks cleaner in your code.




回答5:


You can use class 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*/



回答6:


Since this ranks so high on Google and the fact that it took me a while to find a clear answer myself to something so simple...

To give a complete answer and thoroughly clarify how to return multiple variables that you can actually use independently outside of your function:

  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

If you are using results from database query inside your function more than likely you will need to pass your connection variable into the function. For example, we will say $db is our database connection and you would just modify the two lines of code below:

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

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


来源:https://stackoverflow.com/questions/10554375/how-should-i-return-multiple-variables-in-a-function-for-best-practices

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!