为了账号安全,请及时绑定邮箱和手机立即绑定

函数的多次返回

函数的多次返回

PHP
喵喔喔 2019-07-05 12:40:19
函数的多次返回是否可能有一个具有2次返回的函数,如下所示:function test($testvar){   // do something   return $var1;   return $var2;}如果是这样的话,我如何才能分别得到每一笔退货?
查看完整描述

3 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞


在您的示例中,第二次返回永远不会发生-第一次返回是PHP将运行的最后一次返回。如果需要返回多个值,则返回一个数组:


function test($testvar) {


    return array($var1, $var2);

}


$result = test($testvar);

echo $result[0]; // $var1

echo $result[1]; // $var2


查看完整回答
反对 回复 2019-07-05
?
冉冉说

TA贡献1877条经验 获得超1个赞

无法返回2个变量。不过,你能,会,可以传播一个数组并返回它;创建一个条件来返回一个动态变量,等等。

例如,此函数将返回$var2

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

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

在申请中:

echo wtf();//would echo: tWoecho 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: ONeecho wtf("both")[1]
    //would echo: tWolist($first, $second) = wtf("both")// value of $first would be $var1, value of $second would be $var2


查看完整回答
反对 回复 2019-07-05
?
holdtom

TA贡献1805条经验 获得超10个赞

从技术上讲,您不能返回多个值。然而,有多种方法可以解决这一限制。最类似于返回多个值的方式是使用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将该数组的元素存储在不同的值中,而不是存储实际的数组。使用这种技术感触最喜欢返回多个值。

这个list解决方案是一个相当特定于php的解决方案。有几种语言具有相似的结构,但更多的语言没有。还有一种方法通常用于“返回”多个值,几乎每种语言(以这种或那种方式)都可以使用它。然而,这种方法看起来会很不一样,因此可能需要一些习惯。

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

这种技术也在php本身定义的一些函数中使用(例如,$count在……里面Str替换$matches在……里面预匹配)。这可能与返回多个值很不一样,但至少值得知道。

第三种方法是使用对象来保存所需的不同值。这是更多的输入,所以它没有上面两种方法那么频繁地使用。但是,如果在许多地方使用相同的变量集(当然,使用一种不支持上述方法或允许您在不需要额外键入的情况下完成此操作)的语言,使用这种方法可能是有意义的。

class MyXYZ{
    public $x;
    public $y;
    public $z;}function getXYZ(){
    $out = new MyXYZ();

    $out->x = 4;
    $out->y = 5;
    $out->z = 6;

    return $out;}$xyz = getXYZ();$x = $xyz->x;$y = $xyz->y;$z = $xyz->z;

上述方法总结了从函数返回多个值的主要方法。然而,这些方法也有不同之处。最有趣的变体是那些实际上正在返回数组的变体,因为在PHP中可以使用数组做很多事情。

首先,我们可以简单地返回一个数组,而不是把它当作一个数组:

function getXYZ(){
    return array(1,2,3);}$array = getXYZ();$x = $array[1];$y = $array[2];$z = $array[3];

上面代码最有趣的部分是,函数中的代码与我提供的第一个示例中的代码相同;只有调用函数的代码发生了变化。这意味着这取决于调用函数的人如何处理函数返回的结果。

或者,可以使用关联数组:

function getXYZ(){
    return array('x' => 4,
                 'y' => 5,
                 'z' => 6);}$array = getXYZ();$x = $array['x'];$y = $array['y'];$z = $array['z'];

PHP确实有compact函数,该函数允许您执行上述操作,但同时编写的代码较少。(嗯,示例的代码不会少,但现实世界的应用程序可能会这样做。)但是,我认为输入节省的数量是最小的,这使得代码很难阅读,所以我不会自己去做。然而,这里有一个示例:

function getXYZ(){
    $x = 4;
    $y = 5;
    $z = 6;

    return compact('x', 'y', 'z');}$array = getXYZ();$x = $array['x'];$y = $array['y'];$z = $array['z'];

应该指出,虽然compactextract这可以在这里的调用代码中使用,但是由于使用它是个坏主意(特别是对于像这样简单的东西),我甚至不会给出它的示例。问题是,它将为您创建“神奇”变量,而如果不进入代码的其他部分,则无法看到创建了哪些变量。

最后,我想说的是list真的很好地发挥联想数组。以下是你所期望的:

function getXYZ(){
    return array('x' => 4,
                 'y' => 5,
                 'z' => 6);}$array = getXYZ();list($x, $y, $z) = getXYZ();

然而,以下内容将起到不同的作用:

function getXYZ(){
    return array('x' => 4,
                 'z' => 6,
                 'y' => 5);}$array = getXYZ();list($x, $y, $z) = getXYZ();// Pay attention: $y == 6 && $z == 5

如果你用list使用关联数组,而且其他人必须在将来更改被调用函数中的代码(这可能发生在任何情况下),它可能突然中断,所以我建议不要组合。list有关联数组。


查看完整回答
反对 回复 2019-07-05
  • 3 回答
  • 0 关注
  • 530 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信