PHP: 関数の引数

PHPでの関数の「引数」について解説します。

関数の引数

関数に渡す値を「引数」といいます。 引数を受け取った関数側では、引数を元に何らかの処理を行います。

基本的な引数の指定方法は次のように 関数名の後の()丸括弧内に引数を指定します。

関数名(引数1, 引数2, ...)

引数が1つの場合

引数を1つ渡す場合のコード例です。 「関数名(引数)」と指定します。

// 関数定義
function f_double($a){
	return $a * 2;
}

// ----------------------

// 関数呼び出し
$n = f_double(3);

echo $n . " \n";  // 6

引数が複数の場合

引数が複数の場合は各引数をカンマ区切りで指定します。
次のコードは引数が2つなので「関数名(引数1, 引数2)」と指定しています。

// 関数定義
function f_plus($a, $b){
	return $a + $b;
}

// ----------------------

// 関数呼び出し
$n = f_plus(1, 5);

echo $n . " \n";  // 6

引数なしの場合

引数がない場合は丸括弧()内に何も記述せず「関数名()」と記述します。 関数名の後に()がない場合はエラーが発生します。

// 関数定義
function f_hello(){
	echo "Hello World!" . " \n";
}

// ----------------------

// 関数呼び出し
$n = f_hello();

// 実行結果
Hello World!

仮引数と実引数の違い

関数定義部分の引数と、関数呼び出し部分の引数を区別するために、 「仮引数」「実引数」と呼ぶことがあります。

仮引数」とは関数定義部分で指定する引数のことです。 定義段階では仮でしかないので仮引数といいます。

function 関数名(仮引数1, 仮引数2, ...){
	処理
	return;
}

実引数」とは関数を呼び出す部分で実際に指定する引数のことです。

関数名(実引数1, 実引数2, ...)

値渡しと参照渡し

引数の渡し方には2通りあります。
値を直接渡す「値渡し」と、 変数のアドレスを渡す「参照渡し」の2つです。

参照渡しの場合は、関数定義の引数の前に「&」記号を付けます。

値渡し
function 関数名($引数名)...
参照渡し
function 関数名(&$引数名)...

参照渡しの具体的なコードは次のようになります。

// 関数定義
function f_double(&$a){
	$a = $a * 2;
	return;
}

// ----------------------

$n = 3;
// 関数呼び出し
f_double($n);

echo $n . " \n";  // 6

変数 $n を参照渡しで渡しています。 その結果、関数 f_double によって $n の値が書き換えられています。

デフォルト引数

引数にデフォルト値を設定することもできます。 関数の引数定義部分に「引数 = デフォルト値」と記述し、 関数を呼び出すときに引数が省略された場合、デフォルト値が適用されます。

次のコードでは、$a のデフォルト値として 1 を設定しています。

// 関数定義
function f_double($a = 1){
	return $a * 2;
}

// ----------------------


// 関数呼び出し
$n = f_double();

echo $n . " \n";  // 2

デフォルト引数を設定する際の注意点として、 ある引数にデフォルト引数を設定した場合、 その右側にある引数にもデフォルト引数を設定する必要があります。

次のようなデフォルト引数の設定はできません。

// NG
function test($a = 1, $b){
	処理
}

次のような設定は大丈夫です。

// OK
function test($a, $b = 1){
	処理
}

// OK
function test2($a, $b = 1, $c = 1){
	処理
}