有可能有一个函数有两个返回值,像这样:

function test($testvar)
{
  // Do something

  return $var1;
  return $var2;
}

如果是这样,我怎样才能分别得到每一个回报?


当前回答

最佳实践是将返回的变量放入数组,然后使用list()将数组值赋给变量。

<?php

function add_subt($val1, $val2) {
    $add = $val1 + $val2;
    $subt = $val1 - $val2;

    return array($add, $subt);
}

list($add_result, $subt_result) = add_subt(20, 7);
echo "Add: " . $add_result . '<br />';
echo "Subtract: " . $subt_result . '<br />';

?>

其他回答

你总是只能返回一个变量,它可能是一个数组。但是你可以在函数内部修改全局变量。大多数时候,这不是很好的风格,但它是有效的。在类中,您通常从函数内部更改类变量而不返回它们。

我知道我迟到了,但是有一个很好的简单的解决方法。 使用解构可以一次返回多个值。

function test()
{
    return [ 'model' => 'someValue' , 'data' => 'someothervalue'];
}

现在你可以用这个

$result = test();
extract($result);

Extract为数组中的每个成员创建一个变量,以该成员命名。因此,您现在可以访问$model和$data

或者你可以通过引用传递:

function byRef($x, &$a, &$b)
{
    $a = 10 * $x;
    $b = 100 * $x;
}

$a = 0;
$b = 0;

byRef(10, $a, $b);

echo $a . "\n";
echo $b;

这将输出

100
1000

它不可能有两个返回语句。然而,它不会抛出错误,但当函数被调用时,你只会收到第一个返回语句值。 我们可以使用return of array来获取多个返回值。例如:

function test($testvar)
{
  // do something
  //just assigning a string for example, we can assign any operation result
  $var1 = "result1";
  $var2 = "result2";
  return array('value1' => $var1, 'value2' => $var2);
}
$var1 = 0;
$var2 = 0;

function test($testvar, &$var1 , &$var2)
{
  $var1 = 1;
  $var2 = 2;
  return;
}
test("", $var1, $var2);

// var1 = 1, var2 = 2 

这不是一个好方法,但我认为我们可以在一个函数中同时设置两个变量。