【问题标题】:PHP: pass a variable to a function, do something to the variable, return it backPHP:将变量传递给函数,对变量执行某些操作,然后将其返回
【发布时间】:2011-04-04 09:51:23
【问题描述】:

假设如下代码:

<?php
function doStuff($rowCount) {
    $rowCount++;
    echo $rowCount.' and ';
    return $rowCount;
}
$rowCount = 1;
echo $rowCount.' and ';
doStuff($rowCount);
doStuff($rowCount);
doStuff($rowCount);
?>

想要的输出是

1 and 2 and 3 and 4 and

实际输出是

1 and 2 and 2 and 2 and

我认为我正在理解“返回”在这种情况下是如何工作的。我怎样才能最好地做到这一点?

【问题讨论】:

  • 我想你需要回顾一下你对变量作用域的理解,在 php 中按值传递和引用概念......

标签: php variables return


【解决方案1】:

您要么必须将 doStuff 调用的返回值分配回本地 $rowCount 变量:

$rowCount = 1;
echo $rowCount.' and ';
$rowCount = doStuff($rowCount);
$rowCount = doStuff($rowCount);
$rowCount = doStuff($rowCount);

或者您通过将&amp; 放在形式参数$rowCount 前面将变量作为reference 传递:

function doStuff(&$rowCount) {
    $rowCount++;
    echo $rowCount.' and ';
    return $rowCount;
}

现在,函数doStuff 中的形参$rowCount 与函数调用中传递给doStuff 的变量的值相同。

【讨论】:

    【解决方案2】:

    你应该试试这个:

    $rowCount = 1;
    echo $rowCount.' and ';
    $rowCount = doStuff($rowCount);
    $rowCount = doStuff($rowCount);
    $rowCount = doStuff($rowCount);
    

    您的doStuff() 方法返回一个从未使用过的int,当您只使用语句doStuff($rowCount); 而没有赋值时。

    【讨论】:

      【解决方案3】:

      更改function doStuff($rowCount)

      function doStuff(&amp;$rowCount)

      通常在 PHP 中,您会将变量的副本发送给函数,因此函数内的修改不会影响函数外变量的值。添加 & 号告诉 PHP 发送对变量的引用,以便对变量的修改传播回调用者。

      【讨论】:

      • 为什么要使用这种方法,而 doStuff 已经返回了 $rowCount 的新值?
      • 在您的代码中,您实际将返回值存储到哪个变量?
      • @ultrajohn - 我不是,返回的值被丢弃了。
      • @Colin - 我读得太快了,在我回答之前没有看到返回值:)
      • 哦,对不起,我以为@colin 是 OP.. ;(@tloach,我的问题实际上是向我认为是 OP 的 Colin 提出的问题..
      【解决方案4】:

      我只是尝试修复代码:...

      <?php
      function doStuff($rowCount) {
          $rowCount++;
          echo $rowCount.' and ';
          return $rowCount;
      }
      $rowCount = 1;
      echo $rowCount.' and ';
      doStuff(doStuff(doStuff($rowCount)));
      
      ?>
      

      【讨论】:

        【解决方案5】:

        您需要传递变量“按引用”而不是“按值”来完成此操作,在函数声明中向变量添加 &:

        function doStuff(&$rowCount);
        

        也可以查看PHP: Passing by Reference

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-17
          • 2011-12-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多