2017-02-13 1 views
0

誰かが簡単な言葉で私に説明して、最終出力に$ a = 21を付けることはできますか?

$a = '1';  
echo $a . "<br>"; // result 1 

$b = &$a; 
echo $b . "<br>"; // result 1 

$b = "2$b"; 
echo $b . "<br>"; // result 21 

echo $a . "<br>"; // result 21 WHY? 

echo $a . ", " . $b; // result 21, 21 

ありがとうございます。私は非常に助けていただきありがとうございます。

+0

まあ、あなたは '$ a'への参照である' $ b'に "21"を割り当てます。それは参照が何のためのものです... – arkascha

+2

[文字列解析](http://php.net/manual/en/language.types.string.php#language.types.string.parsing)と[参照による割り当て](http://php.net/manual/en/language.operators.assignment.php#language.operators.assignment.reference)。 – Mikey

+0

Mikey – GRowing

答えて

3

あなたは

$b = "2$b"; 

を行うときに、それは$ Bの現在の値が何であれに続く2 『「文字列に$ bの値を設定する』を意味しているためにです。以前

あなたが

を置きます
$b = &$a; 

これは「$のための新しい参照を作成し、それがBを呼び出す$」、または他の言葉で意味を指している$メモリでも同じことで、$ B点を作る。

$ bの値を更新すると、$ aと$ bの両方が指し示すメモリブロックに格納されている値が実際に更新されているので、$ bを特定の値に設定すると$ aになります両方とも同じものを参照しているため、同じ値です。

+1

なぜ、 '$ b'の値を再設定すると、新しい文字列' 2 $ b'を指すのではなく、同じメモリアドレスを指しているのでしょうか? '$ b'は' $ a'へのポインタであり、その値を再割り当てするとき、別のメモリアドレスを指していると考えられます(Cの動作とほぼ同じです)。 –

+0

ああ、@GordonM、ありがとう。 Gotcha ..私はそれを得ると思います。 – GRowing

+0

これは私に「あなたが$ bの値を更新すると、メモリブロックに格納されている値を実際に更新しているときに、$ aと$ bの両方が " – GRowing

関連する問題