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

但我很想知道在这样的简单情况下哪种方法最适合?

4

6 回答 6

19

你绝对应该返回一个数组。它更清晰。您甚至可以使用该list构造来模拟多个返回值 a-la python:

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

编辑:在某些情况下,关联数组也非常合适。我无法想象性能差异会导致这种清晰度损失。

于 2012-05-11T15:33:28.237 回答
5

使用参考资料(如果有意义的话)http://de.php.net/manual/en/language.references.php

例子:

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

或者返回一个数组。

并且永远不要使用全球!这是非常糟糕的设计,不可维护。

于 2012-05-11T15:33:14.887 回答
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*/
于 2014-07-13T10:34:36.210 回答
2

您可以返回一个数组并使用列表来获取值,请参阅http://www.php.net/manual/en/function.list.php

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

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

echo "$var1, $var2";

对我有用,我不知道这有多快,但也许它在你的代码中看起来更干净。

于 2012-05-11T15:40:27.360 回答
2

从代码维护的角度来看,关联数组选项更好,因为您不会破坏全局命名空间。其他人也更容易阅读您的代码。

于 2012-05-11T15:32:55.117 回答
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);
于 2016-08-08T20:12:48.137 回答