【値渡し/参照渡し】PHPでの関数の引数の渡し方【現役エンジニアが解説】

PROGRAM

今回は、PHPでの関数の引数の渡し方について、値渡しと参照渡しに分け、簡単に解説していきます。

値渡しの方法

値渡しとは、関数の引数としてセットした変数等の値だけを引き渡す方式です。

値渡しでは、引数として受け取った値を関数で定義しているローカル変数に代入し、その変数名で関数内で扱うことができます。

function getDouble($arg) {
    return $arg*2;
}
$num = 200;
getDouble($num); // $numではなく戻り値として400が得られる

上記のコードでは、値渡しで受け取った第一引数の値を$argに代入し、それを2倍してreturnで関数呼び元に戻り値として返しています。

参照渡しの方法

参照渡しとは、関数の引数としてセットした関数外の変数を関数内で扱えるように引き渡す方式です。

参照渡しでは、関数の定義で()内の引数として受け取るローカル変数名の直前に&(アンパサンド)を付ける必要があります。

function setDouble(&$arg) {
    $arg = $arg*2;
}
$num = 200;
setDouble($num) // 戻り値ではなく引数で渡した$numが400になる

上記のコードでは、参照渡しで受け取った第一引数の変数のポインタを$argに記録し、$argを2倍したものを$argに入れることで、関数呼び元が第一引数にセットした$numに2倍された値が入ることになります。

通常は値渡しを利用

数々の開発を行ってきた経験から言えることは、通常の開発ではほとんど値渡しを利用するということです。

関数の外側にある変数を操作したい場合も、通常は値渡しで関数に引き渡し、戻り値を関数外の変数に代入するという形を取ります。

参照渡しはポインタ渡しとも呼ばれますが、preg_match等の一部のPHPの標準関数を除けば、参照渡しを使う機会はPHPではあまりないでしょう。