函数的多次返回怎么实现?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

是否可以有一个函数,其中包含2次返回,如下所示:

function test($testvar)
{
  // do something

  return $var1;
  return $var2;
}

如果是这样的话,我如何才能分别得到每一个返回?

提问于
用户回答回答于

没有办法返回2个变量。虽然你可以传播一个数组并返回它; 创建一个条件返回一个动态变量等

例如,这个函数会返回 $var2

function wtf($blahblah = true) {
    $var1 = "ONe";
    $var2 = "tWo";

    if($blahblah === true) {
      return $var2;
    }
    return $var1;
}

在应用中:

echo wtf();
//would echo: tWo
echo wtf("not true, this is false");
//would echo: ONe

如果你想要它们两个,你可以修改一下这个函数

function wtf($blahblah = true) {
    $var1 = "ONe";
    $var2 = "tWo";

    if($blahblah === true) {
      return $var2;
    }

    if($blahblah == "both") {
      return array($var1, $var2);
    }

    return $var1;
}

echo wtf("both")[0]
//would echo: ONe
echo wtf("both")[1]
//would echo: tWo

list($first, $second) = wtf("both")
// value of $first would be $var1, value of $second would be $var2
用户回答回答于

从技术上讲,不能返回多个值。但是,有多种方法可以解决这个限制。最类似返回多个值的方式是使用list关键字:

function getXYZ()
{
    return array(4,5,6);
}

list($x,$y,$z) = getXYZ();

// Afterwards: $x == 4 && $y == 5 && $z == 6
// (This will hold for all samples unless otherwise noted)

从技术上讲,你正在返回一个数组,并用它list来存储该数组的元素,而不是存储实际的数组。

还有另外一种常用来“返回”多个值的方法,它可以用几乎所有语言(以这种或那种方式)提供。但是,这种方法看起来很不一样,所以可能需要一些习惯。

// note that I named the arguments $a, $b and $c to show that
// they don't need to be named $x, $y and $z
function getXYZ(&$a, &$b, &$c)
{
    $a = 4;
    $b = 5;
    $c = 6; 
}

getXYZ($x, $y, $z);

这种技术也被用于php本身定义的一些函数中(例如,$countstr_replace中$matchespreg_match中)。这可能与返回多个值有很大不同,但至少值得了解。

扫码关注云+社区