こんにちは、ryohei(@ityryohei)です!

引数とは

引数とは関数が外から受け取る値を指します。

定義した関数に引数を指定するには以下のように記述します。

$変数 = 値;

function 関数名 ($変数) {
	処理…
}

関数名の後の()内に引数を指定します。上では例として変数と書いていますが、文字列や数値を直接指定することもできます。変数や配列についても同様です。また、引数に指定したからといって関数外の値に影響はありません。

引数を指定する

例えば以下のようなプログラムがあるとします。

<?php

numeric_decision(5);

function numeric_decision($num){

	$check_num = $num;

	if($check_num % 2 === 0){
		echo "偶数です。";
	}else{
		echo "奇数です。";
	}
}

?>

上のプログラムは引数の数字が奇数であるか偶数であるかを判定します。実行すると「奇数です。」という文字列が表示されます。本来であれば値が0より小さい数の場合の処理も必要ですが、今は置いておきます…!

引数とは関数が外から受け取る値であるとお話しました。外というのは関数内ではなく関数外の値を指します。上のプログラムの場合、整数5が該当します。引数に指定された値を関数が受け取り、処理に使っていることがお分かりいただけると思います。

ちなみに、上のプログラムでは関数実行時に引数がないとエラーが表示されます。エラーを表示させないようにするには引数にデフォルト値を設定する必要があります。

引数のデフォルト値

引数を設定した関数を定義した場合、引数なしで実行するとエラーが表示されます。それを回避するため、予め関数に引数のデフォルト値を指定します。

$変数 = 値;

function 関数名 ($変数 = デフォルト値) {
	処理…
}

関数名()内の$変数に代入する値がデフォルト値です。

上の奇数偶数を判断するプログラムに引数のデフォルト値を指定したサンプルを書いてみます。

<?php

numeric_decision();

function numeric_decision($num = "None"){

	$check_num = $num;

  if(is_numeric($check_num)){

    if($check_num % 2 === 0){
      echo "偶数です。";
    }else{
      echo "奇数です。";
    }

  }else{
    echo "数値ではありません。";
  }
}

?>

引数のデフォルト値に None という文字列を設定しました。

最初のif文にある is_numeric は PHP で予め用意されている関数です。is_numeric の引数に指定された値が数値かどうかを判断してくれます。数値または数値文字列であれば TRUE を、でなければ FALSE を返します。

引数で数値が指定されなければ関数内の変数は None という文字列を保持したまま処理が実行されます。そのため最初のif文で数値ではないと判断され、「数値ではありません」という文字列が表示されます。

可変長引数

引数は指定したいけれど、いくつになるかわからない…

そういった場合は可変長引数を使用します。今回紹介するのはPHP5.6から使用できる記述方法です。

可変長引数は、以下ように指定します。

<?php

function 関数名(...$変数){
  処理
}

?>

書き方は非常にシンプルで、変数の前に…とドットを三つ置くだけです。ただ、可変長引数は指定した変数に配列として渡されますので、その点には注意しましょう。

では、引数に指定した複数の数値の平均を算出するプログラムを書いて見ます。

<?php

function get_average(...$num) {

  $sum = 0;

  foreach($num as $n){
    $sum += $n;
  }
  return $sum / count($num);
}

$avg = get_average(1,2,3,4,5,6,7);
echo $avg;

?>

最後に

PHPには予め沢山の関数が用意されており、それらを呼び出す際に引数を指定する機会が多くあります。引数の意味と動きを理解しておくことで、PHPの関数が利用しやすくなると思います。