Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在函数中返回多个变量(最佳实践)?_Php_Micro Optimization - Fatal编程技术网

Php 如何在函数中返回多个变量(最佳实践)?

Php 如何在函数中返回多个变量(最佳实践)?,php,micro-optimization,Php,Micro Optimization,我只是想知道这样的事情的最佳实践是什么: 一个返回多个变量的函数-如何返回这些变量 像这样(全球化): 或者类似这样(返回数组): 我做了一个性能测试,看起来使用阵列更快(刷新几次后): 但是我很想知道对于这样的简单情况,哪种方法是最好的实践方法?从代码维护的角度来看,关联数组选项更好,因为您没有弄乱全局名称空间。也会让其他人更容易阅读您的代码。使用引用(如果有意义的话) 例如: function myfun(&$var1, &$var2, &$var3) { $

我只是想知道这样的事情的最佳实践是什么:

一个返回多个变量的函数-如何返回这些变量

像这样(全球化):

或者类似这样(返回数组):

我做了一个性能测试,看起来使用阵列更快(刷新几次后):


但是我很想知道对于这样的简单情况,哪种方法是最好的实践方法?

从代码维护的角度来看,关联数组选项更好,因为您没有弄乱全局名称空间。也会让其他人更容易阅读您的代码。

使用引用(如果有意义的话)

例如:

function myfun(&$var1, &$var2, &$var3)
{
    $var1="foo";
    $var2="foo";
    $var3="foo";
}
或者返回一个数组


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

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

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

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

您可以返回一个数组并使用列表来获取值,请参阅

函数多重(){
返回数组('val1','anotherval');
}
列表($var1,$var2)=多个();
回显“$var1,$var2”;
对我来说很有效,我不知道这有多快,但也许在代码中看起来更干净。

您可以使用类


因为这在谷歌上排名很高,而且我花了一段时间才找到一个清晰的答案来回答这么简单的问题

要给出完整答案并彻底阐明如何返回多个变量,这些变量实际上可以在函数之外独立使用:

  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);

你是说阵列更快,对吗?5.999999999505E-6<2.09999999938E-5尽可能避免使用globals…因为爱所有神圣的事物,所以不要使用globals。它们是过去糟糕的PHP4时代留下的可悲的残余,在新代码中没有一席之地。我想我从来没有在
global
的同一句话中听到过“最佳实践”一词。。。谢谢你的笑声。不要测试微小的速度差异。测试以查看哪个更易于阅读和维护。想象一下,一个不熟悉代码的人必须理解并扩展代码。一年后,那个人可能就是你。嗯,我没那么快。。。我想首先测试我的代码,并且必须检查如何进行语法高亮显示——下次,也许。。。
function foon() {
   return array('one', 'two', 'three');
}
list($one, $two, $three) = foon();
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*/
  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
  //original code to change
  function  myFunction() {
  //change to
  function  myFunction($db) {

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