【PHP】参照渡しと値渡しについて!!!٩( ᐛ )و【ポインタ】

こんにちは!
今日は社内の子に参照渡しと値渡しって何だよ!と聞かれたので、せっかくなのでブログでまとめて書こうと思います!

よく言われている通り、参照渡しは値を共有するイメージで、ポインタと似ています!(参照渡し理解できればポインタも理解できるでしょう!)
値渡しは単に値だけを渡して共有はしないってイメージです。

とりあえず実際にコード書いてどう動くか確認してみましょう!
参照渡しと値渡しはどんなプログラミング言語にもあると思うけど、いつも通りPHPで書きます!٩( ᐛ )و٩( ᐛ )و

まずは値渡しのコード

$atai_A = 'atai_Aの値を渡すよ';
$atai_B = null;

echo "値渡し前のatai_Aの値: $atai_A
";
echo "値渡し前のatai_Bの値: $atai_B
";

// $atai_Aの値渡し
$atai_B = $atai_A;

$atai_B = 'atai_Aの値を渡されたよ';

echo "値渡し後のatai_Aの値: $atai_A
";
echo "値渡し後のatai_Bの値: $atai_B
";

実行結果
値渡し前のatai_Aの値: atai_Aの値を渡すよ
値渡し前のatai_Bの値:
値渡し後のatai_Aの値: atai_Aの値を渡すよ
値渡し後のatai_Bの値: atai_Aの値を渡されたよ

ここはプログラムちょっとでもやった人なら納得だと思います!
atai_Aの中を「atai_Aの値を渡すよ」にして、その値を「atai_B」に入れた後に「atai_Aの値を渡されたよ」で上書きしています。

では本題の参照渡し!٩( ᐛ )و

$sansyo_A = 'sansyo_Aの参照を渡すよ';
$sansyo_B = null;

echo "参照渡し前のsansyo_Aの値: $sansyo_A<br/>";
echo "参照渡し前のsansyo_Bの値: $sansyo_B<br/>";

// $sansyo_Aの参照渡し
$sansyo_B =& $sansyo_A;

$sansyo_B = 'sansyo_Aの参照を渡されたよ';

echo "参照渡し後のsansyo_Aの値: $sansyo_A<br/>";
echo "参照渡し後のsansyo_Bの値: $sansyo_B<br/>";

実行結果
参照渡し前のsansyo_Aの値: sansyo_Aの参照を渡すよ
参照渡し前のsansyo_Bの値:
参照渡し後のsansyo_Aの値: sansyo_Aの参照を渡されたよ
参照渡し後のsansyo_Bの値: sansyo_Aの参照を渡されたよ

はい!さっきと違うのは参照渡し後のsansyo_Aの値ですね!
先ほどと同じように、sansyo_Aの中を「sansyo_Aの参照を渡すよ」にして、その値を「sansyo_B」に入れた後に「sansyo_Aの参照を渡されたよ」で上書きしています!

が!なんとsansyo_Aの値も変わっています!
冒頭で説明した通り、値が共有されていますね!
sansyo_Bはsansyo_Aの実態を持っているイメージです!

参照渡しと値渡しどうでしょうか!とりあえず初めのうちは、こう書いたらこう動くと割り切って進めていくのもありです!
次は関数を使った参照渡しを書こうと思います!

それでは٩( ᐛ )و