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-lapythonをシミュレートすることもできます。

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

連想配列オプションは、グローバル名前空間をいじくり回していないため、コードメンテナンスの観点から優れています。また、他の人があなたのコードを読みやすくなります。

于 2012-05-11T15:32:55.117 に答える
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

クラス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

これはグーグルで非常に高いランクにあり、とても単純なものに対する明確な答えを自分で見つけるのに時間がかかったという事実から...

完全な答えを出し、関数の外部で実際に独立して使用できる複数の変数を返す方法を完全に明確にするには、次のようにします。

  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はデータベース接続であり、以下の2行のコードを変更するだけです。

  //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 に答える