PHP代码输出

时间:2012-04-19 07:29:20

标签: php

我正在为我的决赛学习,我遇到了这个问题:

  

运行此代码后写入输出。

<?php
function swap($x, $y) 
{
  $x = $x + 1;
  $y = $y + 2;
  return $x * $y;
}

$a = 3;
$b = swap($a, $a);
print "$a, $b";
$b = swap(&$a, &$a);
print "$a, $b";
?>

我完全理解这段代码的作用,但是在我运行之后,我得到了一个完全不同的答案,我回答的内容并不理解输出。 我得到的输出是3,206,36。

有人可以向我解释输出吗?

4 个答案:

答案 0 :(得分:5)

你得到的实际上是3分,20分,6分,36分,这是正确的答案。如果你不明白为什么你得到“206”而不是“20”和“6”,那只是因为你在第一个print之后没有空格。就是这样。

答案 1 :(得分:1)

首先打印声明打印3,20 第二次印刷声明打印6,36

首先不要对此感到困惑.. 当您通过ref传递值时,它会更改原始值..这就是为什么它将第二个输出作为6,36

答案 2 :(得分:1)

用下面的函数替换你的函数,你就会明白为什么输出会像那样

function swap($x, $y) 
{
    echo "<BR><BR>inside function<BR>:";
    echo "<BR>Original x : ".$x;
    echo "<BR>Original y : ".$x;
    $x = $x + 1;
    $y = $y + 2;
    echo "<BR>After x : ".$x;
    echo "<BR>After y : ".$y;
    echo "<BR>^^^^^^^^^^^^^<BR";
    return $x * $y;
}

第二次x和y的值变为6,6因为您正在使用引用调用。因此,一旦执行了$ x = $ x + 1,那么它就会变为4,并且在执行$ y = $ y + 1之后,它会使$ x = 6(4 + 2)。所以产品变成了36

答案 3 :(得分:1)

原始值为$a = 3

功能是:

function swap($x, $y) 
{
  $x = $x + 1;
  $y = $y + 2;
  return $x * $y;
}

由于您通过引用传递,该函数将修改$a的原始值。在函数中,$a作为$x$y的参数传递,因此$x变为4.由于它是引用变量,$a已被修改为4.现在$y也指向同一个变量$a,所以现在$y实际上是4. 4 + 2使得$y = 6$x也是6,因为$x$y都指向他们都修改过的同一个变量$a。因此$a变为6,$b变为36。