MENU

【PHP】変数の前に付いてる「&」(アンド、アンパサンド)ってなーに

どうも、りょーです。

業務でPHP触る機会あったんだけど、↓みたいに引数に「&」が付いてて「ナニコレ???」ってなった。

PHP入門者だからね。仕方ないね。

<?php
    function fugafuga (&$hogehoge) {
        ...
?>

今後のためにまとめとく。

目次

変数の前に付いてる「&」(アンド、アンパサンド)= 変数を参照渡しするためのもの

リファレンスによると、変数の前に「&」を付けることで参照渡しでやり取りすることになるらしい。

リファレンスにより関数に変数を渡すことが可能です。この場合、関数内で その引数を修正可能になります。

PHP: リファレンス渡し
参照渡し(リファレンス渡し)って?

参照渡し(リファレンス渡し)とは、「データの入った箱そのもの」を渡すイメージ。

(実際は、「データの入ったメモリの番地情報」を渡す。)

参照渡しとよく並んで出てくるのが、値渡し。

値渡しとは、「データの入った箱のコピー」を渡すイメージ。

値渡しだと、渡された変数をいじっても、はこ2に入ってるデータをいじってるだけだから、はこ1のデータは何も変わらない。

参照渡しでは、渡された変数をいじる=はこ1をいじることになるので、当然データも変わる。

実際に書いてみる

参照渡し

<?php
    $osushi = "金目鯛";

    function tabetai (&$osushi) {
        $oniku = &$osushi;
        $oniku = "黒毛和牛";
        print $osushi . "食べたい";
    }

    tabetai($osushi);
?>

実行結果

置き換わっとるね!

参照渡しする時は「&」を明示する必要あるから事故りにくくていいかも?

値渡し

<?php
    $osushi = "金目鯛";

    function tabetai ($osushi) {
        $oniku = $osushi;
        $oniku = "黒毛和牛";
        print $osushi . "食べたい";
    }

    tabetai($osushi);
?>

実行結果

参照渡しと違って、$osushiは書き変わってないね。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次