2012-04-19 46 views
4

私は決勝戦のために勉強していましたし、私はこの質問に出くわした: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でした。

誰かが私に出力を説明できますか?

+0

P.S. PHP 5.3では、関数呼び出しへの参照渡しは廃止されました。意味は '$ b = swap(&$ a、&$a);')しないでください。参照を渡したい場合は、関数シグネチャに設定してください。 'function swap(&$ x、&$ y){'。 http://php.net/manual/en/language.references.pass.php –

答えて

5

あなたが得るものは実際には正しい答えである3、20、6、36です。 "20"と "6"の代わりに "206"が得られた理由がわからないのであれば、最初のprintの後ろに空白がないからです。それでおしまい。

+0

おかげさまで、どのように各価値が生まれるのでしょうか?ああ、スペースは20と6が分かれていないことを意味します:) –

+0

@ F.Dot最初の呼び出しは値によってパラメータを渡し、2番目のパラメータは参照によって渡します。より多くの参照が必要な場合は、検索してください。あなたは多くの情報を見つけるでしょう。 –

1

最初のprint文の印刷3を、20 二print文は6,36

最初のdontを印刷し、この中で混乱.. をご参照によって値を渡すとき、それは元の値を変更することが与える理由.. thatsの6,36

1

として第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)になります。その製品は、元の値が$a = 3

機能である36

1

になっている:

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

あなたが参照渡しされているので、機能は$aの元の値を変更します。それが参照される変数であるので$x$yのパラメータがそう$x 4となるように機能において、$aが渡され、$a今4に変更されてい$yも今$yが実際4 4 +であり、同一の可変$aを指し2は$y = 6となります。 $xも6です。$x$yの両方が両方とも変更された同じ変数$aを指しているためです。従って$aは6になり、$bは36になります。

+0

ありがとう!明確な説明:) –