只是想知道这样的最佳做法是什么:
一个函数,它返回多个变量 - 如何返回这些变量?
像这样(全球化):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
但我很想知道哪种方法最适合这种简单的情况?
答案 0 :(得分:19)
你应该绝对返回一个数组。它更加清晰。您甚至可以使用list
构造来模拟多个返回值a-la python:
function foon() {
return array('one', 'two', 'three');
}
list($one, $two, $three) = foon();
编辑:在某些情况下,关联数组也非常合适。我无法想象性能差异是否值得失去清晰度。
答案 1 :(得分:5)
使用引用(如果有意义)http://de.php.net/manual/en/language.references.php
示例:
function myfun(&$var1, &$var2, &$var3)
{
$var1="foo";
$var2="foo";
$var3="foo";
}
或者返回一个数组。
永远不会使用全球!设计非常糟糕,无法维护。
答案 2 :(得分:2)
从代码维护的角度来看,关联数组选项更好,因为您没有弄乱全局命名空间。其他人也可以更轻松地阅读您的代码。
答案 3 :(得分:2)
您可以返回一个数组并使用列表来获取值,请参阅http://www.php.net/manual/en/function.list.php
function multiple() {
return array('val1', 'anotherval');
}
list($var1, $var2) = multiple();
echo "$var1, $var2";
对我有用,我不知道它有多快,但也许你的代码看起来更干净。
答案 4 :(得分: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*/
答案 5 :(得分: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);