【问题标题】:How to increment PHP variable by parameter in callback function?如何在回调函数中通过参数增加 PHP 变量?
【发布时间】:2016-03-18 10:52:18
【问题描述】:

如何以类似下面的样式增加变量($varA $varB),或者那里缺少的东西,这个函数不起作用:

function myfunc($paramA,$paramB)
{
 $varA+=$paramA;
 $varB+=$paramB;
 return array($varA,$varB);
}

$increm=myfunc(2,7);
echo $increm[0]; //2
echo $increm[1]; //7

$increm=myfunc(4,5);
echo $increm[0]; //6
echo $increm[1]; //12

我想在每次调用这个函数时增加回调函数中的变量。

【问题讨论】:

    标签: php function variables operators increment


    【解决方案1】:

    你想要增加的变量实际上是在函数范围内,所以你不能每次调用函数时都增加。此外,在您需要增加变量的值之前,您需要定义其初始值。

    function myfunc($varA, $varB, $paramA,$paramB)
    {
     $varA += $paramA;
     $varB += $paramB;
     return array($varA,$varB);
    }
    

    你可以调用你的函数:

    $increm = myfunc(10,10,2,7);
    

    您在数组中返回的值超过了您的值。

    $increm2 =myfunc($increm[0], $increm[1],2,7);
    

    注意:当然还有其他方法可以做到这一点,但我正在尝试遵循您的逻辑,这是最适合您的方法。

    【讨论】:

      【解决方案2】:

      有几种不同的方法可以做到这一点,例如使用全局变量,但我不会鼓励这样做。问题是,$varA$varB 是你的函数的本地函数,每次调用你的函数时都会被重置(有效地为 0)。因此,为了在函数调用之间保留旧值,您可以尝试使用静态类成员,如下所示:

      class myfunc {
          static private $varA = 0;
          static private $varB = 0;
      
          public function inc($paramA, $paramB) {
              self::$varA += $paramA;
              self::$varB += $paramB;
      
              return array(self::$varA, self::$varB);
          }
      }
      
      $increm = myfunc::inc(2,7);
      echo $increm[0];
      echo $increm[1];
      
      $increm = myfunc::inc(4,5);
      echo $increm[0];
      echo $increm[1];
      

      这将为您提供以下输出:

      2
      7
      6
      12
      

      或者你可以保留你的函数,但仍然使用静态类成员:

      class MyGlobals {
          static public $varA = 0;
          static public $varB = 0;
      }
      
      function myfunc($paramA, $paramB) {
          MyGlobals::$varA += $paramA;
          MyGlobals::$varB += $paramB;
      
          return array(MyGlobals::$varA, MyGlobals::$varB);
      }
      
      $increm = myfunc(2,7);
      $increm = myfunc(4,5);
      

      希望有帮助

      【讨论】:

      • 是否可以让回调更短,所以我可以使用我自己的方法,比如:something(2,7);回声$给我[0];回声$给我[1];某事(4,5);回声$给我[0];回声$giveme[1];?
      • 我编辑了我的答案以反映您的要求。我不建议在这里使用全局变量,静态类成员似乎是更好的选择。
      猜你喜欢
      • 1970-01-01
      • 2021-02-05
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多